每个文本字段都需要特定类型的文本输入,例如电子邮件地址、电话号码或 纯文本。您必须为应用中的每个文本字段指定输入类型,以便系统显示 相应的软键盘输入法,例如屏幕键盘。
除了输入法提供的按钮类型之外,您还可以指定一些行为,例如 输入法是否提供拼写建议、是否将新句子的首字母大写,以及是否将 带有操作按钮(例如 Done 或 Next)的回车按钮。本页介绍了 以指定这些特征
指定键盘类型
请务必通过向文本字段添加
android:inputType
属性添加到
<EditText>
元素。
例如,如果您想使用一种用于输入电话号码的输入法,可以使用
"phone"
值:
<EditText android:id="@+id/phone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/phone_hint" android:inputType="phone" />
如果文本字段是用于输入密码,请使用 "textPassword"
值
会隐藏用户的输入:
<EditText android:id="@+id/password" android:hint="@string/password_hint" android:inputType="textPassword" ... />
通过 android:inputType
属性记录了多个可能的值,
还可以组合一些值,以指定输入法的外观和其他
行为
启用拼写建议和其他行为
借助 android:inputType
属性,您可以指定输入的各种行为
方法。最重要的是,如果您的文本字段是用于输入基本文本(例如
短信 - 通过 "textAutoCorrect"
启用自动拼写更正
值。
您可以将不同的行为和输入法样式与
android:inputType
属性。例如,下面展示了如何创建一个
将句子的第一个单词的首字母大写,并自动更正拼写错误:
<EditText android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType= "textCapSentences|textAutoCorrect" ... />
指定输入法操作
大多数软键盘输入法都会在底部角落提供一个适用于
当前文本字段。默认情况下,系统会将此按钮用于 Next 或
完成操作,除非文本字段支持多行文本(例如
android:inputType="textMultiLine"
- 在这种情况下,操作按钮是一辆车
return。不过,您可以指定其他可能更适合您的文本字段的操作,
(例如 Send 或 Go)。
要指定键盘操作按钮,请使用
android:imeOptions
属性的值,例如 "actionSend"
或 "actionSearch"
。例如:
<EditText android:id="@+id/search" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/search_hint" android:inputType="text" android:imeOptions="actionSend" />
然后,您可以通过定义一个
TextView.OnEditorActionListener
EditText
元素的值。在
则响应
EditorInfo
类,
例如
IME_ACTION_SEND
,
如以下示例中所示:
Kotlin
findViewById<EditText>(R.id.search).setOnEditorActionListener { v, actionId, event -> return@setOnEditorActionListener when (actionId) { EditorInfo.IME_ACTION_SEND -> { sendMessage() true } else -> false } }
Java
EditText editText = (EditText) findViewById(R.id.search); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_SEND) { sendMessage(); handled = true; } return handled; } });
提供自动填充建议
如果要在用户输入时提供建议,可以使用
已调用 EditText
AutoCompleteTextView
。
要实现自动填充,您必须指定一个
Adapter
,用于提供文本
建议。有多种适配器可供选择,具体取决于数据的来源,如
从数据库或数组中获取。
以下步骤介绍了如何设置 AutoCompleteTextView
,
使用
ArrayAdapter
:
- 将
AutoCompleteTextView
添加到布局中。此处的布局仅包含文本 字段:<?xml version="1.0" encoding="utf-8"?> <AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/autocomplete_country" android:layout_width="fill_parent" android:layout_height="wrap_content" />
- 定义包含所有文本建议的数组。例如,以下是
国家/地区名称的数组:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="countries_array"> <item>Afghanistan</item> <item>Albania</item> <item>Algeria</item> <item>American Samoa</item> <item>Andorra</item> <item>Angola</item> <item>Anguilla</item> <item>Antarctica</item> ... </string-array> </resources>
- 在
Activity
或Fragment
,请使用以下代码 指定提供建议的适配器:Kotlin
// Get a reference to the AutoCompleteTextView in the layout. val textView = findViewById(R.id.autocomplete_country) as AutoCompleteTextView // Get the string array. val countries: Array<out String> = resources.getStringArray(R.array.countries_array) // Create the adapter and set it to the AutoCompleteTextView. ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries).also { adapter -> textView.setAdapter(adapter) }
Java
// Get a reference to the AutoCompleteTextView in the layout. AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country); // Get the string array. String[] countries = getResources().getStringArray(R.array.countries_array); // Create the adapter and set it to the AutoCompleteTextView. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, countries); textView.setAdapter(adapter);
在前面的示例中,初始化了新的
ArrayAdapter
,以绑定 将countries_array
字符串数组转换为TextView
simple_list_item_1
布局。这是 Android 提供的布局, 文本的标准外观。 -
通过调用以下方法来将适配器分配给
AutoCompleteTextView
setAdapter()
。