3

我在每个列表视图项中有一个带有不可见 EditText 和可点击 TextView 的 ListView。我正在尝试实现一种行为,即单击 TextView 将使 EditText 可见,专注于 EditText 并使软键盘自动出现。

我将adjustResize其用作我的输入法,而不是adjustPan因为显然我正在测试该功能的 S3 与adjustPan. (具体来说,当软键盘出现时,整个视图被推上去,这很好。但是,一旦我开始打字,整个视图就会滑回,好像软键盘不在那里一样!但它是!HTC不会出现问题一)。列表视图也有afterDecendents.

当列表视图有更多可以完全适应屏幕的项目时,会出现一个问题,即触发的软键盘对 editText 没有响应。

我以编程方式触发软键盘,imm.showSoftInput(holder.editText,0)整个视图重新调整自身以适应软键盘。一旦显示了软键盘并且视图完成了重新布局,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 问题中尝试过的其他答案排列也没有真正可靠地工作。示例问题: 如何在edittext获得焦点时显示软键盘Android软键盘为什么没有响应EditText?, Android:当焦点位于 EditText 上时,对话框自动显示软键盘不起作用

4

1 回答 1

-2

问:我有什么方法可以可靠地以编程方式模拟用户点击可见的编辑文本

这样我就可以触发与“单击”编辑文本一起正常工作的软键盘?

是的,

当你想模拟你点击EditText时添加这个

          editText.performClick();    //softkeyboard will open
          editText.setPressed(true);  // edittext will get highlighted
          editText.invalidate();        //Invalidate the whole view

完毕!!

于 2013-09-18T05:01:20.813 回答