Android官方文档—User Interface(Input Controls)(Text Fields)

文本域

文本域允许用户在您的应用中键入文本。它可以是单行或多行。触摸文本字段会放置光标并自动显示键盘。除了键入之外,文本字段还允许进行各种其他活动,例如文本选择(剪切,复制,粘贴)和通过自动完成查找数据。

您可以使用EditText对象向布局添加文本字段。您通常应该在XML布局中使用<EditText>元素执行此操作。

指定键盘类型


图1.默认文本输入类型。

文本字段可以具有不同的输入类型,例如数字,日期,密码或电子邮件地址。该类型确定字段内允许的字符类型,并可以提示虚拟键盘优化其常用字符的布局。

您可以使用android:inputType属性为EditText对象指定所需的键盘类型。例如,如果您希望用户输入电子邮件地址,则应使用textEmailAddress输入类型:

<EditText
    android:id="@+id/email_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/email_hint"
    android:inputType="textEmailAddress" />
图2. textEmailAddress输入类型。

有几种不同的输入类型可用于不同的情况。以下是android的一些更常见的值:inputType:

"text"

普通文字键盘。

"textEmailAddress"

带@字符的普通文本键盘。

图3.手机输入类型。

"textUri"

带/字符的普通文本键盘。

"number"

基本数字键盘。

"phone"

电话式键盘。

控制其他行为

android:inputType还允许您指定某些键盘行为,例如是否将所有新单词大写或使用自动完成和拼写建议等功能。

android:inputType属性允许按位组合,因此您可以同时指定键盘布局和一个或多个行为。

以下是一些定义键盘行为的常见输入类型值:

"textCapSentences"

普通文本键盘,用于为每个新句子的首字母大写。

"textCapWords"

普通文本键盘,用于大写每个单词。标题或人名很好。

"textAutoCorrect"

普通文本键盘,可以纠正拼写错误的单词。

"textPassword"

普通文本键盘,但输入的字符变成点。

"textMultiLine"

普通文本键盘,允许用户输入包含换行符(回车符)的长字符串。

例如,以下是如何收集邮政地址,大写每个单词以及禁用文本建议的方法:

<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" />

所有行为也都与android:inputType文档一起列出。

指定键盘操作


图4.如果声明android:imeOptions =“actionSend”,
则键盘包含Send动作。

除了更改键盘的输入类型之外,Android还允许您指定用户完成输入时要执行的操作。该操作指定出现的按钮代替回车键和要执行的操作,例如“搜索”或“发送”。

您可以通过设置android:imeOptions属性来指定操作。例如,以下是指定“发送”操作的方法:

<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,以便用户可以选择“下一步”以移至下一个字段。如果没有后续的可聚焦字段,系统将应用“actionDone”操作。您可以通过将android:imeOptions属性设置为任何其他值(例如“actionSend”或“actionSearch”)来覆盖此操作,或者通过使用“actionNone”操作来禁止默认行为。

响应操作按钮事件

如果已使用android:imeOptions属性(例如“actionSend”)为输入法指定了键盘操作,则可以使用TextView.OnEditorActionListener侦听特定的操作事件。 TextView.OnEditorActionListener接口提供了一个名为onEditorAction()的回调方法,该方法指示使用操作ID(如IME_ACTION_SEND或IME_ACTION_SEARCH)调用的操作类型。

例如,以下是用户单击键盘上的“发送”按钮时的监听方式:

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;
    }
});

设置自定义操作按钮标签

如果键盘太大而不能与底层应用程序合理地共享空间(例如当手机设备处于横向时),则触发全屏(“提取模式”)。在此模式下,输入旁边会显示标记的操作按钮。您可以通过设置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:imeActionLabel的自定义动作标签。

添加其他键盘标志


除了可以使用android:imeOptions属性指定的操作外,还可以添加其他标志以指定其他键盘行为。列出所有可用的标志以及android:imeOptions文档中的操作。

例如,图5示出了当手机设备处于横向方向时系统如何启用全屏文本字段(或者屏幕空间另外受空间限制)。您可以在android:imeOptions属性中使用flagNoExtractUi禁用全屏输入模式,如图6所示。

图6.使用android:imeOptions =“flagNoExtractUi”禁用全屏文本字段(“提取模式”)。

提供自动完成建议


如果要在用户键入时向其提供建议,可以使用名为AutoCompleteTextView的EditText子类。要实现自动完成,您必须指定提供文本建议的适配器。有几种适配器可用,具体取决于数据的来源,例如数据库或数组。

图7.带有文本建议的AutoCompleteTextView示例。

以下过程介绍如何使用ArrayAdapter设置AutoCompleteTextView以提供来自阵列的建议:

1.将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" />

2.定义包含所有文本建议的数组。例如,这是一个在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>

3.在“活动”或“片段”中,使用以下代码指定提供建议的适配器:

// 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字符串数组中的每个项目绑定到simple_list_item_1布局中存在的TextView(这是Android提供的布局,为列表中的文本提供标准外观)。

然后通过调用setAdapter()将适配器分配给AutoCompleteTextView。

猜你喜欢

转载自blog.csdn.net/weixin_42703445/article/details/83860047
今日推荐