Android TextFields

概述:

文本框, 允许用户输入文本, 可以为单行或则多行, 点击一个文本框之后它会得到焦点, 然后会自动弹出键盘, 文本框还支持复制粘贴等操作.

我们可以通过添加一个<EditText>标签来为我们的layout增加一个文本框.

 

 

为文本框指定一个键盘类型:

每个文本框都可以指定不同的输入文本类型, 比如数字, 日期, 密码或者邮件等. 我们可以通过EditText的android:inputType属性来指定键盘的类型, 比如如果我们需要一个接收Email的文本框, 那么我们应该使用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" />

不同的输入类型会弹出不同种类的键盘, 这是一些常见的通过android:inputType指定的输入类型:

“text”: 普通文本, 键盘这样:


“textEmailAddress”: 在普通文本键盘的基础上增加了@符号:


"textUri": 在普通文本键盘的基础上增加”/”符号.

“number”: 基本数字键盘.

“phone”: 电话样式键盘.



控制别的行为:

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

更多的inputType可以参考这里.

指定键盘动作:

除了改变键盘的输入类型, 还可以改变键盘的操作, 比如你这是一个用于搜索框的键盘, 还是用于聊天框的键盘, 完成的动作会有所区别, 搜索框的可能会有一个搜索按钮, 而聊天框会有一个发送按钮.


我们可以通过指定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" />

如果我们不指定任何的imeOpotions的话, Android会自动识别, 是否存在下一个可以获得焦点的文本框, 如果有的话, Android会指定当前文本框的imeOptions为”actionNext”, 这时候用户可以通过点击键盘上的Next来获取下一个焦点. 如果没有下一个可以获得焦点的文本框, 那么imeOptions会被指定为”actionDone”. 我们可以重写这一属性使用比如”actionSend”, “actionSearch”或者”actionNone”.

 

响应一个键盘动作事件:

如果我们指定了android:imeOptions属性(比如actionSend), 那么就可以通过TextView.onEditorActionListener来监听键盘的Send按钮被按下的事件,TextView.onEditorActionListener提供了一个onEditorAction()的回调方法, 当Send按钮被按下的时候, 该方法会收到一个IME_ACTION_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) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

TextFiled自动完成:

如果我们希望让TextFiled可以为用户提供输入建议, 那么我们可以使用AutoCompleteTextView 类, 它是TextView类的子类, 为了实现这个功能, 我们必须实现一个Adapter. 根据数据源的不同, 我们有几种Adapter可以选择, 比如从数据库选择或者从一个数组选择. 这是AutoCompleteTextView工作的时候的样子:


下面的栗子描述了AutoCompleteTextView如何通过ArrayAdapter从一个数组中获取数据:

1.      首先在layout文件中添加一个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/string.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.      在我们的Activity或者fragment的代码中, 关联数据, ArrayAdapter和AutoCompleteTextView:

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

首先读取资源文件中的string数组, 存在countries中, 然后通过该数据创建adapter, 最后将adapter传给AutoCompleteTextView.

 

参考: http://developer.android.com/guide/topics/ui/controls/text.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值