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

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

Android Design Support Library系列之三:TextInputLayout的使用_第1张图片

TextInputLayout官方文档

一、TextInputLayout的简单使用

惯例,使用前先添加依赖

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

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

布局文件



    

        

    


    


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

来看看效果图:


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

关于Android Design Support Library主题

    

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

Theme.AppCompat.Light.NoActionBar

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

 @android:color/holo_blue_dark

二、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会慢慢变多的。

你可能感兴趣的:(Android Design Support Library系列之三:TextInputLayout的使用)