概述
文本控件允许用户在你的app中打字。它可以是单行的,也可以是多行的。触摸文本控件所占的空间会显示光标并且自动弹出软键盘。除了打字之外,文本控件允许各种其它活动,如文本选择(剪切,复制,黏贴)和由自动完成功能(
auto-completion.
)提供的数据查询。
指定软键盘类型
文本控件有许多不同的输入类型,如数字,日期,密码或邮箱地址。输入类型决定了何种字符被允许键入文本内,如果频繁使用字符,可以优化虚拟键盘的布局。
<EditText
android:id="@+id/email_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/email_hint"
android:inputType="textEmailAddress" />
控制其它行为
android:inputType 属性也允许按位组合(用|操作符来连接多个值),这样你就可以一次性 同时指定键盘布局和 一个或多个行为。例如,下面展示的代码可以允许你收集邮箱地址,利用每一个单词,并且禁用文本建议。
<EditText
android:id="@+id/postal_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_address_hint"
android:inputType="textPostalAddress|
textCapWords|
textNoSuggestions" />
指定键盘操作
除了改变键盘的输入类型,安卓允许你指定一个当用户完成他们的输入时执行的操作。被指定操作的按钮会出现并替代回车键和它要做出的动作,例如“查找”或“发送”
<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" />
如果你并没有明确的指出一个输入动作,
系统会尝试确定是否
之后有包含
android:focusable的(文本)字段。
如果在这之后找到了任何可聚焦的(文本)字段,系统就会提供一个
actionNext
操作来移出
EditText
,这样用户将可以选择Next来移动到下一个(文本)字段。如果没有,系统提供
"actionDone"
操作。你可以通过设置
android:imeOptions
属性为任何其它的值
来覆盖该操作
,如
"actionSend"
or
"actionSearch"
,或者使用默认的
"actionNone"
行为。
响应操作按钮事件
如果你使用
android:imeOptions
属性指定了一个键盘操作(如
"actionSend"
),你可以通过使用
TextView.OnEditorActionListener
. 来监听这个操作事件。
TextView.OnEditorActionListener接口提供了一个回掉函数
onEditorAction()
,用操作ID来标明每一个操作类型,如
IME_ACTION_SEND
or
IME_ACTION_SEARCH
.。
例如,这段代码展示你如何去监听用户点击Send按钮时的事件:
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) {
// Send the user message
handled = true;
}
return handled;
}
});
设置自定义操作按钮标签
如果键盘太大而不能合理的占用应用下方的空间时(如,当手机设备处于横向时)就会开启全屏。在该模式下(全屏),一个被标记的操作按钮显示在了输入框的旁边。你可以自定义这个按钮上的文本,通过设置
android:imeActionLabel
属性。
<EditText
android:id="@+id/launch_codes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/enter_launch_codes"
android:inputType="number"
android:imeActionLabel="@string/launch" />
添加其它键盘标志
例如,图5展示了如何使系统全屏显示文本字段,当手机处于横向(或屏幕空间受限)。你可以禁用全屏输入模式,通过
android:imeOptions属性的
flagNoExtractUi
值,如图6所示。
提供自动补全建议
如果你想给用户的输入提供一些建议,你可以使用
EditText
的子类
AutoCompleteTextView
. 为了实现自动补全,你必须指定一个提供建议文本的适配器。有许多现成的适配器可供使用,取决于数据的来源,如来自于数据库或数组。
在你的布局中添加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资源文件下的定义的数组 (
res/values/strings.xml
),包含国家名。<?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
,使用如下的代码来指定适配器来提高建议。// 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
被初始化,为 每一个TextView
绑定了每一个国家字符串,这个TextView
存在于simple_list_item_1
布局中(该布局是由安卓提供的,它的作用是提供显示一个标准的文本列表)然后,通过调用
setAdapter()
.来为AutoCompleteTextView
绑定这个适配器。