硬键盘无法聚焦editText

Posted

技术标签:

【中文标题】硬键盘无法聚焦editText【英文标题】:Hard keyboard Fail to focus editText 【发布时间】:2011-08-25 18:40:50 【问题描述】:

我有一个通用的 EditText。这很奇怪,因为我在使用硬键盘时无法对焦。上下文条件:

    打开 Droid 的硬键盘 开始活动 点击editText输入 输入失败。当您按任意键时,editText 会失去焦点。

要获得焦点: 按 Dpad,您将看到焦点从屏幕中的第一个小部件开始。最后关注目标EditText。然后就可以输入了。没有这个,你根本无法用硬键盘输入。

软键盘没有这样的焦点问题。

我使用的是安卓 2.2。这是系统错误吗?

【问题讨论】:

我在用作密码字段的 EditText 小部件上遇到了同样的问题。其他 EditText 小部件(密码和非密码)在其他布局中工作得很好。如果重要的话,损坏的小部件是带有 ButtonBar 样式的 LinearLayout 的一部分(尽管我认为这只是添加了一些填充和背景)。 我猜 EditText 可能被其他东西包裹,然后它就坏了。类似的情况是将列表视图包装在滚动条中。我尝试使用单个编辑文本,没关系。我会根据您提供的信息检查布局,稍后再发表评论。 我仍然找不到任何解决方案。我只能找到: EditText 无法获得硬键盘焦点的地方有一个 TabHost 作为顶部。有什么想法吗? 嗯,我的没有 TabHost。我会尝试看看它是否被报告为一个错误(如果没有,就开始一个)。 我遇到了类似的问题。我在 FrameLayout 中的 LinearLayout 中有一个表单。 FrameLayout 也有一个 TabHost,但即使我隐藏了选项卡主机(可见性 = 无)同样的问题。似乎是观点组合的某种问题?发生在 1.6 和 2.1 的模拟器中 【参考方案1】:

如上所述,这显然是硬键盘的错误。如果您的布局中有一个 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 方法中使用它。

【讨论】:

【参考方案2】:

我也有同样的问题。我有点同意杰的观点。通常 TabHost 和/或 TabActivity 使用 LocalActivityManager 来跟踪嵌入的活动或在 FrameLayout 元素中显示的适当的 ContentStrategy 组件。简单来说,这是一个典型的嵌入式活动/嵌入式视图布局问题。编辑文本位于占用触摸屏空间的最顶层 Activity/View 上,而实际上有一个核心 Activity 托管此 Activity/View,它可能正在获取 InputMethodService 焦点并使其远离编辑文本,仅适用于硬键盘场景。软键盘工作正常。

我对编辑文本所做的一项更改是将 InputType 更改为纯十进制。因此,当编辑文本获得焦点时,软键盘会显示数字键盘,而不是字母 qwerty 键盘。我在 Motorla Droid Pro 模拟器上运行它,我在 Motodev 网站的 Eclipse 插件中更新了该模拟器。显然,当我在为编辑文本提供焦点后尝试从硬键盘输入文本时(并且软键盘显示数字键盘),在我单击“ALT + 2”后,重新加载软键盘作为字母键盘,而编辑文本完全失去焦点。

在 Froyo 版本中对我来说似乎是一个严重的错误,对硬键盘设备的支持不足,无法在嵌入其他布局(TabHost 的 FrameLayout)的布局(LinearLayout)中编辑文本视图。

【讨论】:

以上是关于硬键盘无法聚焦editText的主要内容,如果未能解决你的问题,请参考以下文章

android-edittext键盘不显示

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

GridView+PopupWindow自定义数字键盘

Windows 窗体:无法单击以聚焦非***窗体中的 MaskedTextBox

键盘聚焦性 和点击性

聚焦 TextInput 时的大写键盘