每个文本字段都期望某种类型的文本输入,例如电子邮件地址、电话号码或纯文本。您必须为应用程序中的每个文本字段指定输入类型,以便系统显示适当的软输入法,例如屏幕键盘。
除了输入法提供的按钮类型之外,您还可以指定行为,例如输入法是否提供拼写建议、将新句子大写以及用操作按钮(如 **完成** 或 **下一步**)替换回车键。此页面展示了如何指定这些特性。
指定键盘类型
始终通过向 <EditText>
元素添加 android:inputType
属性来声明文本字段的输入法。
例如,如果您想要一个用于输入电话号码的输入法,请使用 "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" ... />
指定输入法操作
大多数软输入法在底部角落提供一个用户操作按钮,该按钮适合当前文本字段。默认情况下,系统使用此按钮执行 **下一步** 或 **完成** 操作,除非您的文本字段支持多行文本(例如,使用 android:inputType="textMultiLine"
),在这种情况下,操作按钮是回车键。但是,您可以指定可能更适合文本字段的其他操作,例如 **发送** 或 **转到**。
要指定键盘操作按钮,请使用 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" />
然后,您可以通过为 EditText
元素定义一个 TextView.OnEditorActionListener
来监听操作按钮上的按下操作。在您的监听器中,响应 EditorInfo
类中定义的适当 IME 操作 ID,例如 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
字符串数组中的每个项目绑定到simple_list_item_1
布局中存在的TextView
。这是一个 Android 提供的布局,它为列表中的文本提供标准外观。 - 通过调用
setAdapter()
将适配器分配给AutoCompleteTextView
。