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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观

这篇文章解释了用于控制 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 对象中检索。