我有一个ListView,在每个listview项目中都有一个不可见的EditText和一个可点击的TextView。我正在尝试实现一种行为,点击TextView将使EditText可见,专注于EditText并使软键盘自动出现。
我正在使用adjustResize
作为我的输入法而不是adjustPan
,因为显然我在测试该功能的S3是adjustPan
的疯狂者。 (具体来说,当软键盘出现时,整个视图会被推高,这很好。但是,一旦我开始输入,整个视图就会向下滑动,好像软键盘不在那里!但它确实是!HTC不会出现问题一)。列表视图也有afterDecendents
。
当列表视图中有更多可以完全适合屏幕的项目时,触发的软键盘无法响应editText会出现问题。
我用imm.showSoftInput(holder.editText,0)
以编程方式触发软键盘,整个视图重新调整以适应软键盘。显示软键盘并且视图完成其重新布局后,edittext不会接收除退格之外的所有键条目。这意味着我不能在edittext中添加任何单词或数字,但我可以删除它们,这很奇怪。
另一个有趣的事情是,我意识到如果我不以编程方式显示软键盘并让用户点击可见的edittext来显示软键盘,那么一切正常。 (这也让我感到困惑,因为我怀疑listview回收和聚焦机制是造成所有这些问题的原因。软键盘出现的地方导致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问题中尝试的答案的其他排列也没有真正可靠地工作。 示例问题: 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
答案 0 :(得分:-2)
问我有没有办法可靠地以编程方式模拟用户点击可见的编辑文本
这样我就能触发一个与“点击”的edittext一起正常工作的软键盘?
是,
如果要模拟点击 EditText
,请添加此项 editText.performClick(); //softkeyboard will open
editText.setPressed(true); // edittext will get highlighted
editText.invalidate(); //Invalidate the whole view
完成!!