【问题标题】:Setting explicit focus on an input method editor / softkeyboard in android在android中的输入法编辑器/软键盘上设置显式焦点
【发布时间】:2011-09-16 12:04:47
【问题描述】:

我正在使用 Android 的标准软键盘输入法编辑器。在按下特定键并且edittext视图具有焦点后,我在我的android模拟器上显示软键盘。我的目的是在软键盘出现在屏幕上后将焦点设置在软键盘上。我知道软键盘通常用于在没有硬键盘的情况下进行输入,但在我的情况下,我正在开发的应用程序需要此功能,因为它将在自定义设备上运行,并且正在修改 android 的源代码以实现自定义功能。有人知道如何解决这个问题吗?触摸模式是否可能不允许在键盘上设置焦点?

编辑:澄清

对不起,含糊不清。在以下情况下,基本上我需要软键盘的以下功能。

  1. 用户将光标(使用键盘)放在 EditText 上。因为他使用的是键盘,所以应用程序不会显示软键盘。
  2. 用户按下键盘上的特殊键以调出软键盘。
  3. 焦点应该从 EditText 变为 SOFTKEYBOARD,这意味着用户应该能够使用硬键盘导航和选择软键盘上的键。当然,这意味着应该将按键事件添加到标准软键盘中。
  4. 用户选择一个键后,他按下回车键(例如),键字符应出现在编辑文本上。

现在的问题是,当我调出软键盘时,FOCUS 仍停留在编辑文本上。我想知道是否甚至可以将焦点放在软键盘上并使用硬键盘移动它。正如我之前告诉你的,这是自定义功能。也许我用错误的方式解决了这个问题,一个带有键盘视图的简单弹出窗口就足够了。

Lauren 我认为你是对的,因为标准软键盘是作为服务实现的,并且不遵循常规视图的规则。

感谢任何建议。

谢谢

【问题讨论】:

  • 请详细说明您希望软键盘向下还是不向下。你想要关键事件吗..我的意思是我没有从你的理论中得到任何你想要的东西

标签: android android-source


【解决方案1】:

我认为这里有两种“焦点”:

  • EditText 焦点是必要的,以确保键盘事件只有一个接收器
  • 键盘焦点,表示键盘可见并且可以按下按键。

据我了解,在 android 中,只有 EditText 获得焦点。由于特殊的Insets 类,键盘在服务中运行并获得触摸事件。

如果您只需要强制使用键盘可见性,您应该尝试来自this question 的答案。

编辑

我认为有两种方法可以做到这一点,具体取决于您是希望此键盘特定于某个活动还是随处可用。

  • 特定活动

据我了解,负责显示键盘视图的 inputmethodservice 不允许您实现此目的。

我最好的建议是创建一个具有“可聚焦键”功能的专用键盘视图(扩展键盘视图将是一个很好的起点)。

您可以更改键盘的可见性(使用 View.VISIBLE 和 View.GONE)以使其出现和消失。

然后,您应该编写自己的行为代码,以突出显示具有焦点的键并相应地移动它。

您的活动还必须记住最后一个具有焦点的 EditText 以向其发送文本或键码。

  • 系统范围

如果您需要在系统的任何地方都可以使用此行为,那么您必须提供自己的inputmethodservice。我建议您查看 SDK 中的 this postSoftKeyboard sample

请注意,您还需要如上所述创建自定义 KeyboardView,但无需记住 EditText 焦点。

【讨论】:

  • 我现在更好地理解了我应该如何实现这个功能。感谢您的建议。
  • 从 SDK SoftKeyboard 示例(答案中的链接)开始并自定义 LatinKeyboardView 行为。
  • @solarc 你能做到这一点吗?如果是,请告诉我们自定义 KeyboardView 类需要进行哪些更改。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多