Android Design Support Library系列之三:TextInputLayout的使用

EditText作为Android中最常用的组件之一,相信很多人对它都很熟悉,EditText有一个属性hint,能提示我们输入什么信息,当用户在EditText输入文字时,hint属性提示的文字就消失了。
说到这,就要介绍今天的主角TextInputLayout了,使用TextInputLayout能让hint属性提示的文字在用户输入时不消失,而是显示为EditText上方的浮动标签。


TextInputLayout官方文档

一、TextInputLayout的简单使用

惯例,使用前先添加依赖

dependencies {
    compile 'com.android.support:design:25.3.1'
}

TextInputLayout继承自LinearLayout,是一个容器。跟ScrollView只能嵌套一个子元素特性一样,TextInputLayout也只接受一个子元素。子元素需要是一个EditText

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/et_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Username"
            android:inputType="textEmailAddress" />

    </android.support.design.widget.TextInputLayout>


    <EditText
        android:id="@+id/et_normal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Normal"
        android:inputType="textEmailAddress" />

</LinearLayout>

上面的布局文件中有2个EditText,都声明了hint属性,其中一个EditText用
TextInputLayout包裹了,另外一个没有.
PS: 其实hint属性直接设置给TextInputLayout也是可以的

来看看效果图:


我们可以看到,一个单一的EditText 在输入文字的时候会隐藏hint提示的文本,而被包含在TextInputLayout中的EditText则会让hin提示的文本变成一个在EditText上方的浮动标签,同时还包括一个漂亮的material动画。

关于Android Design Support Library主题

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

我们在AndroidStudio中创建项目时,系统在res/values/style.xml中的主题一般向上面这样,大多数时候我们只是在这里去除ActionBar:

Theme.AppCompat.Light.NoActionBar

Material Design设计语言鼓励大家使用充满活力的鲜艳色彩,并在同一界面建议使用三种色调,Android Design Support Library中每个控件的设计颜色都来自 style.xml 中 theme 指定的三种颜色。
在此处,我们通过修改 colorAccent 属性便可以指定 TextInputLayout 的浮动标签的字体颜色以及 EditText 的下划线颜色。

 <item name="colorAccent">@android:color/holo_blue_dark</item>

二、TextInputLayout的一些属性、方法

属性

android:hint=""    直接把hint属性设置给TextInputLayout也是可以的
android:textColorHint=""  hint提示内容的颜色(在下划线上时)
app:hintEnabled="true"    设置是否可以使用hint属性,默认是true
app:hintAnimationEnabled="false"      控制hint提示信息的动画是否开启
app:hintTextAppearance=""   设置hint提示文本(在浮动标签时)的样式(大小、颜色等等)
app:errorTextAppearance=""  设置错误信息文本的样式(大小、颜色等等)

方法

getEditText()    返回TextInputLayout包裹的EditText
getHint()     返回TextInputLayout包裹的EditText中的hint信息
setHint()     设置TextInputLayout包裹的EditText中的hint信息
setError()            设置错误显示信息
setErrorEnabled()        设置错误信息是否显示,true显示,false不显示

当然,Android中的属性和方法一般是一一对应的,你既可以在布局文件中设置,也可以通过代码设置。

三、TextInputLayout处理错误

在以前,我们一般都是在提交信息时才检验EditText中内容格式正不正确,如果用户输入了一大堆信息之后你再提示用户输入的格式不正确,这是一种很糟糕的体验。

而用TextInputLayout处理错误,可以实时验证EditText的内容,反馈结果给用户,防止用户输入无效的、错误的信息。

public class MainActivity extends AppCompatActivity {

    private EditText etName;
    private TextInputLayout mTextInputLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etName = (EditText) findViewById(R.id.et_name);
        mTextInputLayout = (TextInputLayout) findViewById(R.id.textInputLayout);

        /**
         * 为EditText 添加文本内容改变时的监听
         */
        etName.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() < 6) {
                    mTextInputLayout.setErrorEnabled(true);
                    mTextInputLayout.setError("用户名不能小于6位");
                } else {
                    mTextInputLayout.setErrorEnabled(false);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }
}

在EditText 内容发生改变时,我们通过判断EditText 内容来提示用户,这里我判断EditText 内容长度是否小于6,当然,你完全可以在这里通过正则表达式判断更多的东西.



可以看到,在EditText 内容不正确的时候,下方有一个错误信息显示,同时EditText 的下划线变成红色,这样就能实时的提示用户输入的内容是否正确了.

TextInputLayout使用比较简单,就介绍到这里,现在市场上有这种效果的app不是很多,不过相信在以后这种效果的app会慢慢变多的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,987评论 25 707
  • 引言 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给...
    李牧羊阅读 2,166评论 3 4
  • Android Design Support Library使用详解 Google在2015的IO大会上,给我们带...
    eclipse_xu阅读 2,531评论 5 25
  • 潇潇洒洒又一天,日子如炊烟般弥漫整个花季。人生如电影,戏如人生。每个人拿到手头的剧本可以相同,但演绎的角色却各有千...
    毛柒灵阅读 187评论 0 1
  • 好像大梦一场,到了醒来的时候了。从来没有过的疯狂,都过去了,没有后悔更没有遗憾,感谢这次华丽的冒险,让我认识了一个...
    dearanny阅读 138评论 3 2