在ListView中模拟EditText上的用户触摸操作
我有一个ListView与一个不可见的EditText和每个列表视图项中的可点击的TextView。 我试图实现一种行为,点击TextView将使EditText可见,并着重于EditText并使软键盘自动出现。
我使用adjustResize
作为我的输入法,而不是adjustPan
因为很明显我对测试功能的S3云疯狂与adjustPan
。 (具体来说,当软键盘出现时,整个视图被推高,这很好,但是,一旦我开始打字,整个视图就会滑回去,就好像软键盘没有在那里一样!但是,问题不会发生在HTC一)。 listview也有afterDecendents
。
当列表视图中有更多项目可以完全适合屏幕时,触发的软键盘无法响应editText时会出现问题。
我用imm.showSoftInput(holder.editText,0)
以编程方式触发软imm.showSoftInput(holder.editText,0)
整个视图重新调整以适应软键盘。 一旦显示软键盘并且视图完成了重新布局,除了退格键之外的所有关键条目都不会被edittext接收到。 这意味着我不能将任何文字或数字添加到edittext中,但我可以删除它们,这很奇怪。
另一个有趣的事情是,我意识到如果我没有以编程方式显示软键盘并让用户点击可见的编辑文本来显示软键盘,那么一切正常。 (这也困扰我,因为我怀疑列表视图回收和聚焦机制是造成所有这些问题的地方。在软键盘出现的地方,导致listview重新布局,因此回收视图,以便引用editText丢失等)
所以,最终,我的问题是,有没有什么办法可以让我可靠地编程模拟用户点击可见的编辑文本,这样我就可以触发一个软键盘,可以与“点击”编辑文本正常工作?
我也尝试过以下方法,它不能可靠地工作(有时它可以工作,有时不起作用,延迟时间播放不会做任何事情)。
holder.editText.postDelayed(new Runnable(){
@Override
public void run() {
holder.editText.requestFocus();
holder.editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
holder.editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}}, 500);
我从许多SO问题中尝试过的其他答案也没有真正可靠地工作。 示例问题:如何在edittext聚焦时显示软键盘,Android软键盘如何不响应EditText? ,当对焦点在EditText不工作时,Android:对话框会自动显示软键盘
Q有没有什么办法让我可靠地编程模拟用户点击可见的编辑文本
这样我就可以触发一个软键盘,它可以与“点击”编辑文本正常工作?
是,
当你想模拟点击EditText时添加这个
editText.performClick(); //softkeyboard will open
editText.setPressed(true); // edittext will get highlighted
editText.invalidate(); //Invalidate the whole view
完成!
链接地址: http://www.djcxy.com/p/24233.html