我有同样的问题。在editText可见性从GONE更改为VISIBLE后,我必须立即设置焦点并显示软键盘。我使用以下代码实现了这一点:
new Handler().postDelayed(new Runnable() {
public void run() {
// ((EditText) findViewById(R.id.et_find)).requestFocus();
//
EditText yourEditText= (EditText) findViewById(R.id.et_find);
// InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 200);
它对我来说有100ms的延迟,但是没有任何延迟或只有1ms的延迟而失败。
代码的注释部分显示了另一种方法,该方法仅在某些设备上有效。我在操作系统版本2.2(仿真器),2.2.1(真实设备)和1.6(仿真器)上进行了测试。
这种方法减轻了我很多痛苦。