在安卓系统中设置输入法编辑器/软键盘的显式焦点

4
我正在使用Android的标准软键盘输入法编辑器。在特定按键被按下且EditText视图获得焦点后,我会在Android模拟器上显示软键盘。我的目的是在软键盘出现在屏幕上后将焦点设置为软键盘。我知道软键盘通常用于完全没有硬键盘的输入,但在我的情况下,我正在开发的应用程序需要这个功能,因为它将在自定义设备上运行,并且Android的源代码正在进行修改以实现自定义功能。有人有任何想法如何解决这个问题吗?可能触摸模式不允许将焦点设置在键盘上吗?
编辑:澄清
抱歉说话不清楚。基本上,我需要在以下情况下从软键盘获得以下功能。
1.用户使用键盘在EditText上放置光标。因为他正在使用键盘,所以应用程序不会显示软键盘。 2.用户按下键盘上的SPECIAL键以弹出软键盘。 3.焦点应从EditText更改为SOFTKEYBOARD,这意味着用户应该能够使用硬键盘导航和选择软键盘上的键。当然,这意味着键事件应添加到标准软键盘。 4.用户选择一个键后按Enter(例如),则键字符应出现在EditText上。
目前的问题是,当我打开软键盘时,焦点仍然停留在EditText上。我想知道是否可能将焦点放在软键盘上,并使用硬键盘在其上移动。正如我之前告诉你的,这是自定义功能。也许我正在错误地解决这个问题,一个简单的弹出窗口和键盘视图就足够了。
Lauren在某种意义上是正确的,标准软键盘是作为服务实现的,并且不遵循常规视图的规则。
感谢您的建议。

请详细说明您想要做什么,您是希望软键盘下降还是不下降?您是否需要按键事件?我的意思是,从您的理论中我无法得到任何信息,您究竟想要什么。 - Abhinav Singh Maurya
1个回答

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

  • EditText焦点是必要的,以确保键盘事件只有一个接收者
  • 键盘焦点,意味着键盘可见且可以按键。

据我所知,在Android中,只有EditText会获得焦点。键盘在服务中运行,并通过特殊的Insets类获取触摸事件。

如果你只需要强制显示键盘可见性,你可以尝试this question中的答案。

编辑

我认为有两种方法可以做到这一点,具体取决于你是否希望此键盘仅针对某个活动或在任何地方都可用。

  • 活动特定

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

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

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

然后,你需要编写自己的行为来突出显示具有焦点的键并相应地移动它。

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

  • 系统范围

如果你需要在系统的任何地方都可以使用此功能,则必须提供自己的inputmethodservice。我建议你查看this post以及SDK中的SoftKeyboard示例

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


我现在更清楚该如何实现这个功能了。感谢您的建议。 - solarc
从SDK SoftKeyboard示例(链接在答案中)开始,并自定义LatinKeyboardView的行为。 - Laurent'
@solarc,你能实现这个吗?如果可以,请告诉我们自定义KeyboardView类需要做哪些更改。谢谢。 - CodeFury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接