在android中设置输入法编辑器/软键盘的显式焦点

时间:2011-09-16 12:04:47

标签: android android-source

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

编辑:澄清

抱歉模棱两可。基本上我在以下情况下需要软键盘中的以下功能。

  1. 用户在EditText上放置光标(使用键盘)。因为他使用的是键盘,所以应用程序不会显示软键盘。
  2. 用户按下键盘上的SPECIAL键以调出软键盘。
  3. 焦点应该从EditText更改为SOFTKEYBOARD,这意味着用户应该能够使用硬键盘导航并选择软键盘上的键。当然,这意味着应将关键事件添加到标准软键盘中。
  4. 用户选择一个键后,按下Enter键(例如),键字符应出现在edittext上。
  5. 现在的问题是,当我调出软键盘时,FOCUS仍然在编辑文本上。我想知道是否可以将焦点放在软键盘上并使用硬键盘移动它。正如我之前告诉过你的那样是自定义功能。也许我正在以错误的方式处理这个问题,一个带键盘视图的简单弹出窗口就足够了。

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

    感谢任何建议。

    谢谢

1 个答案:

答案 0 :(得分:2)

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

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

据我所知,在android中,只有EditText才能获得焦点。键盘在服务中运行并获得触摸事件,感谢特殊的Insets类。

如果你只需要强制键盘可见性,你应该尝试this question的答案。

修改

我认为有两种方法可以执行此操作,具体取决于您是希望此键盘特定于某个活动还是随处可用。

  • 特定于活动

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

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

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

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

您的活动还必须记住最后一个专注于向其发送文本或keyCodes的EditText。

  • 系统范围

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

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