Android 键盘黑客 - 隐藏键盘和自定义操作

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

这篇文章解释了用于控制 Android 软键盘外观和行为的各种代码技巧。

大多数基于表单的应用程序通常需要自定义 Android 软键盘的默认行为。通常需要控制您希望向用户呈现数据输入的键盘类型,或自定义键盘 Enter 键操作的外观。

让我们先从在编辑表单数据时控制类型键盘显示开始。

1.设置TextView输入类型

为方便用户而设计了不同类型的键盘。例如,如果要输入数字,则必须显示数字键盘。这可以通过 TextView 的 InputType 属性来控制。 InputType 控制方面,例如放置在文本字段中的数据类型。通常您可以选择单个值,但也可以按照指示将某些值组合在一起。将此属性设置为 none 以外的任何值也意味着该文本是可编辑的。

一些最常用的输入类型常量包括 none text textCapCharacters textCapWords textCapSentences textAutoCorrect textAutoComplete textMultiLine textImeMultiLine textUri textEmailAddress textPassword textWebEditText textPhonetic textWebEmailAddress number phone datetime date time .

您可以在布局声明中设置 inputType 属性,如下所示


 <EditText
   android:id="@+id/text1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionSearch"
   android:singleLine="true"
   android:inputType="number" />

2.自定义输入法

现在我们了解了基于 TextView inputType 属性的不同键盘类型,让我们自定义键盘 Enter 操作的外观。

当键盘在屏幕上可见时,Enter 键上的文本通常会根据视图中可聚焦项目的顺序指示其操作。虽然未指定,但如果视图中有更多焦点要移动到,键盘将显示“下一步”操作,或者如果当前关注最后一个项目,则键盘将显示“完成”操作。在多行字段的情况下,此操作是换行。

可以使用 TextView XML 声明中的 android:imeOptions 值自定义此值。 android:imeOptions 属性访问以下可能的值:

  • actionUnspecified: 此属性显示设备选择的动作 Action 事件为 IME_NULL。这是默认的键盘操作。
  • actionGo: 这会将 Go 显示为 Enter 键。动作事件是 IME_ACTION_GO
  • actionSearch: 显示搜索图标,因为 Enter 键 Action 事件是 IME_ACTION_SEARCH
  • actionSend: 将发送显示为回车键。操作事件是 IME_ACTION_SEND
  • actionNext: 将 Next 显示为 Enter 键。操作事件是 IME_ACTION_NEXT
  • actionDone: 将完成显示为 Enter 键。操作事件是 IME_ACTION_DONE

以上所有的动作事件常量都定义在 EditorInfo 类中。

让我们看一下带有两个可编辑文本字段的示例布局。第一个 EditText 将显示 Enter 键的搜索图标,第二个将显示 Go。生成的输出可能非常依赖于设备上当前安装的键盘。


 <EditText
   android:id="@+id/text1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionSearch"
   android:singleLine="true"
   android:inputType="number" />

请注意,自定义编辑器选项仅适用于软输入法的外观。更改此值不会影响用户按下物理硬件键盘按钮时生成的事件。

3. 添加自定义动作

自定义用户按下 Enter 键时发生的情况与调整其外观一样重要。为了覆盖默认行为,我们需要将 OnEditorActionListener 附加到 EditText 实例。

以下代码片段显示了如何为 EditText 创建自定义操作。


 <EditText
   android:id="@+id/text1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionSearch"
   android:singleLine="true"
   android:inputType="number" />

onEditorAction() 的布尔返回值告诉系统您的实现是否已经使用了该事件,或者它是否应该传递给下一个可能的响应者(如果有)。

当您自己处理事件时返回 true 对您来说很重要,因此不会发生其他处理。当您不处理事件时,您可以返回 false,这样您的应用程序就不会从系统的其余部分窃取关键事件。

4.隐藏软键盘

以下代码片段将帮助您从屏幕上隐藏或关闭软键盘。


 <EditText
   android:id="@+id/text1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionSearch"
   android:singleLine="true"
   android:inputType="number" />

hideSoftInputFromWindow() IBinder 窗口标记作为参数。这可以通过 View.getWindowToken() 从当前附加到窗口的任何 View 对象中检索。