我有一个共同的EditText。这很奇怪,因为我在使用硬键盘时无法集中注意力。上下文条件:
获得焦点: 按Dpad,您将看到焦点从屏幕中的第一个小部件开始。最后关注目标EditText。然后你可以输入。没有这个,你根本不能输入硬键盘。
软键盘没有这样的焦点问题。
我使用的是Android 2.2。这是系统错误吗?
答案 0 :(得分:9)
如上所述,这显然是硬键盘的错误。如果您的布局中有EditText和TabHost,则在按下第一个键时,EditText将失去焦点,而按键将被发送到活动。这是解决这个问题的方法。在您的活动中实施此功能。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
final EditText myInputField = (EditText) findViewById(R.id.MyInputEditText);
// this will happen on first key pressed on hard-keyboard only. Once myInputField
// gets the focus again, it will automatically receive further key presses.
if (!myInputField.hasFocus()){
myInputField.requestFocus();
myInputField.onKeyDown(keyCode, event);
}
return super.onKeyDown(keyCode, event);
}
如果您有多个EditText字段,则需要在类变量中跟踪当前关注的EditText并在onKeyDown方法中使用它。
答案 1 :(得分:0)
我有同样的问题。我有点同意杰伊。通常,TabHost和/或TabActivity使用LocalActivityManager来跟踪嵌入的活动或FrameLayout元素中显示的相应ContentStrategy组件。简而言之,这是典型的嵌入式活动/嵌入式视图布局问题。编辑文本位于占据触摸屏空间的最顶层的活动/视图上,而实际上托管此活动/视图的核心活动可能正在抓取InputMethodService焦点并使其远离编辑文本,仅适用于硬键盘场景。软键盘工作正常。
我对编辑文本所做的一项更改是将InputType更改为纯十进制。因此,当编辑文本获得焦点时,软键盘会显示数字键盘而不是字母qwerty键盘。我在Motorla Droid Pro模拟器上运行它,我在Motodev网站的Eclipse插件中进行了更新。显然,当我在为编辑文本提供焦点(并且软键盘显示数字键盘)后尝试从硬键盘输入文本时,在我单击“ALT + 2”后,软键盘被重新加载作为字母键盘,而编辑文本完全失去焦点。
在Froyo版本中,似乎是一个严重的错误,在嵌入其他布局(TabHost的TabLay)中的布局(LinearLayout)中编辑文本视图的硬键盘设备支持不足。