Keyboard Type — 这是什么,键盘类型以及 Android 中的输入设置

作者: IT Sectr 发布日期: 2026-07-07 阅读时间: 9 分钟

Keyboard Type — 是 Android 中虚拟键盘的配置,决定了特定输入字段显示字符的集合和布局。Android 支持多种预设类型:text(标准文本)、number(数字)、phone(电话)、email(带 @ 符号)、textPassword(用于密码)、datetime 等。每种类型都为特定任务优化输入界面 — 例如,电子邮件键盘在主屏幕上显示 @ 符号和句点。根据 Android Developers (2026) 的数据,正确选择 Keyboard Type 可使输入按键次数比标准文本键盘减少 20–40%。

要点

  • Keyboard Type — 由 Android 中的 android:inputType 属性确定的键盘模式。
  • 主要类型 — text、number、phone、email、textPassword、datetime,适用于不同的输入场景。
  • 输入优化 — 正确的键盘类型可将表单填写速度提高 20–40%。
  • 标志组合 — inputType 结合了输入类和修饰符(多行、自动更正)。
  • IME 选项 — imeOptions 属性管理键盘上的操作按钮(Done、Search、Next)。

Android 中的 Keyboard Type 是什么

Keyboard Type 由 XML 中的 android:inputType 属性值或代码中的程序化调用 setInputType() 确定。InputType 是一个位掩码,其中输入类(类)与修饰符标志组合在一起。基本类:TYPE_CLASS_TEXT 用于文本,TYPE_CLASS_NUMBER 用于数字,TYPE_CLASS_PHONE 用于电话,TYPE_CLASS_DATETIME 用于日期和时间。

每个 Keyboard Type 影响三个方面:虚拟键盘的布局(主屏幕上可见哪些字符)、输入字符的过滤(允许哪些字符)以及自动更正/自动补全的行为。例如,数字键盘仅显示数字和小数分隔符,即使用户切换模式也不显示字母。根据 Android Developers Documentation (2026),将类与标志组合可以创建高度专业化的模式:带自动更正的多行文本、浮点数、带自动补全功能的密码。

重要的是要理解 Keyboard Type 是对输入系统(IME)的建议。如果用户配置了自己的偏好,某些第三方键盘(Gboard、SwiftKey)可能会部分忽略指定的类型。但是,大多数标准 Android 键盘和 Google Gboard 都严格遵守指定的输入类型。

kotlin
// 程序化键盘类型设置
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL or
    InputType.TYPE_NUMBER_FLAG_SIGNED

Text — 标准文本键盘

TYPE_CLASS_TEXT — 文本输入的基本类。它激活带有字母、数字和符号的标准 QWERTY 键盘。Text 类拥有最多的修饰符,用于精确指定行为:TYPE_TEXT_FLAG_CAP_SENTENCES(句首自动大写)、TYPE_TEXT_FLAG_AUTO_CORRECT(自动更正)、TYPE_TEXT_FLAG_MULTI_LINE(多行模式)、TYPE_TEXT_FLAG_NO_SUGGESTIONS(关闭建议)。

文本键盘的修饰符可以组合以创建精确配置:例如,text|textCapSentences|textAutoCorrect 适用于评论输入字段,需要自动大写和拼写错误更正。而 text|textNoSuggestions 用于输入代码或特殊术语,自动更正可能有害的情况。

根据 UX Stack Exchange (2025) 的数据,启用自动更正的文本键盘对于普通用户可将输入速度提高 15–25%,但对于技术术语(代码、URL、电子邮件),建议关闭自动更正,因为它经常将正确的术语替换为错误的。

xml
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"

<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"

Number — 数字键盘

TYPE_CLASS_NUMBER 激活数字键盘,仅显示数字、小数分隔符和减号。此类型用于输入数量、价格、年龄、代码和其他数字数据的字段。数字键盘在屏幕上比文本键盘占用更少的空间,并排除了意外输入字母的情况。

Number 有三个修饰符:TYPE_NUMBER_FLAG_DECIMAL 添加小数点/逗号,TYPE_NUMBER_FLAG_SIGNED 添加负号用于负数,TYPE_NUMBER_VARIATION_PASSWORD — 用于 PIN 码,其中数字显示为隐藏符号。组合 number|numberDecimal|numberSigned 创建了一个完整的字段,用于输入任何符号的浮点数。

  • number — 正整数(年龄、产品数量)。
  • numberDecimal — 带小数部分的数字(价格、重量、身高)。
  • numberSigned — 带符号的数字(温度、坐标)。
  • numberPassword — 用于 PIN 码的数字隐藏输入。
kotlin
// 带小数点的数字输入
editText.inputType = InputType.TYPE_CLASS_NUMBER or
    InputType.TYPE_NUMBER_FLAG_DECIMAL

// 检查输入的数字
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0

Phone 和 Email — 专用键盘

TYPE_CLASS_PHONE 激活电话键盘,显示电话号码特有的数字和符号:+、#、*、(、)。与数字键盘不同,电话键盘还在附加模式下显示字母布局,因为电话号码可能包含字母(例如 1-800-FLOWERS)。Phone 类没有额外的标志,但支持 TYPE_TEXT_VARIATION_PHONE_ETC 用于输入分机号码。

TYPE_TEXT_VARIATION_EMAIL_ADDRESS 激活电子邮件键盘,@ 符号和句点位于主屏幕上,常用域名扩展(.com、.net、.org)也可用。Gboard 在输入 @ 后还会显示带有流行域名的按钮。电子邮件键盘自动关闭自动更正,因为电子邮件地址可能包含非标准字符组合。

根据 Google Material Design Guidelines (2025),对于电话字段,建议额外指定 android:digits 属性,以限制允许的字符集。对于电子邮件字段,指定 autofillHints="email" 也很重要,以支持密码管理器和 Google Autofill 的自动填充。

xml
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"

<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"

Password — 密码键盘

TYPE_TEXT_VARIATION_PASSWORDTYPE_NUMBER_VARIATION_PASSWORD — 是敏感数据的输入模式。设置 textPassword 时,输入的字符显示为点或星号(取决于 Android 版本和键盘)。此模式下的键盘会关闭自动更正和将输入的单词保存到用户字典,通过预测输入功能防止密码泄露。

Password 键盘还禁用了对字段内容进行截屏的功能(FLAG_SECURE 标志),尽管此行为取决于具体键盘的实现。从 Android 8.0(API 26)开始,如果设置了 importantForAutofill="yes" 属性,密码键盘支持通过密码管理器进行自动填充。

根据 Android Security Recommendations (2025),对于密码字段还建议:设置 maxLength 以防止过长的密码(可能成为对数据库的攻击),使用 inputType="textPassword" 以及 TextInputLayout 和 endIconMode="password_toggle",以便用户可以在提交表单前检查输入的密码。

xml
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">

    @+id/etPasswordField
    android:inputType="textPassword"
    android:maxLength="64"
    android:importantForAutofill="yes" />

</com.google.android.material.textfield.TextInputLayout>

在代码中配置 Keyboard Type

Keyboard Type 的程序化配置允许根据上下文或用户输入动态更改键盘模式。例如,在切换字段类型(文本/数字/日期)时或更改区域设置时。setInputType() 方法接受 InputType 位掩码,并在字段处于焦点时立即更新键盘。

动态切换类型

kotlin
// 在文本和数字输入之间切换
fun switchInputType(field: EditText, isNumeric: Boolean) {
    field.inputType = if (isNumeric) {
        InputType.TYPE_CLASS_NUMBER or
            InputType.TYPE_NUMBER_FLAG_DECIMAL
    } else {
        InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
    }
    field.setSelection(field.text.length)
}

检查当前类型

kotlin
// 检查字段是否为数字
fun isNumericInput(field: EditText): Boolean {
    val type = field.inputType
    return (type and InputType.TYPE_MASK_CLASS) ==
        InputType.TYPE_CLASS_NUMBER
}

// 检查自动更正是否已启用
fun isAutoCorrectEnabled(field: EditText): Boolean {
    return (field.inputType and
        InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}

常见问题解答

如果不指定 Keyboard Type 会怎样?

如果未指定 inputType,EditText 默认使用带有 TYPE_TEXT_FLAG_MULTI_LINE 标志的 TYPE_CLASS_TEXT。这意味着标准 QWERTY 键盘和多行输入。对于大多数字段,建议显式指定 inputType,以确保键盘的正确行为和字符过滤。

如何制作一个带有“完成”按钮而不是“回车”按钮的键盘?

在 EditText 上使用 android:imeOptions="actionDone" 属性。这会将回车按钮替换为完成按钮。其他选项:actionSearch(放大镜)、actionNext(右箭头)、actionSend(发送)。通过代码中的 OnEditorActionListener 实现按下处理。

可以为某个字段关闭键盘振动吗?

无法为特定字段关闭振动 — 这是系统设置,由用户在键盘设置中管理。但是,可以通过在 EditText 上设置 android:focusable="false" 属性或通过 dispatchTouchEvent 取消显示来完全阻止键盘出现。

如何制作一个只读但可以复制文本的字段?

设置 android:inputType="none" 或以程序方式调用 editText.setKeyListener(null)。字段将显示文本,但键盘在焦点时不会出现。用户可以选择和复制文本,但不能修改文本。替代方案 — 使用带有 textIsSelectable="true" 的 TextView。

为什么 setInputType() 后键盘没有改变?

调用 setInputType() 后,需要重新显示键盘,因为系统可能不会自动更新 IME。调用 InputMethodManager.restartInput(view) 以强制更新。如果字段未处于焦点,请先调用 requestFocus(),然后再调用 restartInput。

总结

  • Keyboard Type 决定了 Android 输入字段的键盘布局、过滤和行为。
  • text — 标准 QWERTY 键盘,带有自动更正、大写和多行修饰符。
  • number — 用于整数和小数的数字键盘,带有 signed 和 decimal 选项。
  • phone — 电话键盘,带有数字、+、#、* 并支持字母号码。
  • email — 键盘带有 @、句点和快速访问域名扩展。
  • textPassword — 隐藏输入,关闭自动更正和字典保存。
  • imeOptions 配置键盘上的操作按钮:Done、Search、Next、Send。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读