我有一个 ListView,在每个 ListView 项中都有一个不可见的 EditText 和一个可点击的 TextView。我正在尝试实现一种行为,点击 TextView 将使 EditText 可见,专注于 EditText 并使软键盘自动出现。
我正在使用 adjustResize
而不是 adjustPan
作为我的输入法,因为显然我正在测试该功能的 S3 与 adjustPan
一起疯狂。 (具体来说,当软键盘出现时,整个 View 都会被推上去,这很好。但是,一旦我开始打字,整个 View 就会向下滑回,就好像软键盘不存在一样!但它确实存在!HTC 没有出现问题一)。 ListView 也有 afterDecendents
。
当 listview 有更多项目可以完全适合屏幕时,会出现触发的软键盘不响应 editText 的问题。
我使用 imm.showSoftInput(holder.editText,0)
以编程方式触发软键盘,整个 View 重新调整自身以适应软键盘。一旦显示软键盘并且 View 完成重新布局,除退格键之外的所有键条目都不会被 edittext 接收。这意味着我不能向 edittext 添加任何单词或数字,但我可以删除它们,这真是太奇怪了。
另一件有趣的事情是,我意识到如果我不以编程方式显示软键盘并让用户点击可见的编辑文本以显示软键盘,那么一切正常。 (这也让我感到困惑,因为我怀疑 listview 回收和聚焦机制是导致所有这些问题的原因。出现软键盘的地方会导致 listview 重新布局,从而导致 View 回收,因此对 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 问题中尝试过的其他答案排列也没有真正可靠地工作。 示例问题: How to show soft-keyboard when edittext is focused , How come the Android soft keyboard is not responding to EditText? , Android: Dialog box show soft keyboard automatically when focus is on an EditText not working
最佳答案
问我有什么方法可以可靠地以编程方式模拟用户点击可见的编辑文本
这样我就可以触发与“点击”编辑文本一起正常工作的软键盘?
是的,
当你想模拟你对 EditText
的点击时添加这个 editText.performClick(); //softkeyboard will open
editText.setPressed(true); // edittext will get highlighted
editText.invalidate(); //Invalidate the whole view
完成!!
关于android - 在 Listview 中模拟用户对 EditText 的触摸操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864057/