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