TextInputLayout属于MD风格的控件,TextInputLayout这个控件主要是配合EditText来使用的,以前在EditText中我们经常需要给EditText设置一个hint属性告诉用户这里输入什么,但是用户有可能输着输着就忘了这里该输入什么了,如果有一个控件能够完美解决这个问题就好了,于是乎,在Android M中,Google新推出了TextInputLayout,完美的解决了这个问题。下面我贴上一段代码,带大家一起使用下这么个简单的而高大上的MD风格的控件。
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/usename"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/password"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码" />
</android.support.design.widget.TextInputLayout>
</LinearLayout>
这里需要注意的一点就是一个TextInputLayout控件只能修饰一个EditText,多个EditText需要使用多个 TextInputLayout包裹。
在java代码中对TextInputLayout中做监听控制,java代码如下:
package com.zhuandian.msuic.designTest;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import com.zhuandian.msuic.R;
/**
* Created by 谢栋 on 2016/12/15.
*/
public class TextInputLayout extends Activity implements TextWatcher {
private android.support.design.widget.TextInputLayout inputlayoutUsename;
private android.support.design.widget.TextInputLayout inputlayoutPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_input_layout);
//得到用户名输入TextInputLayout
inputlayoutUsename = (android.support.design.widget.TextInputLayout) findViewById(R.id.usename);
inputlayoutUsename.getEditText().addTextChangedListener(this); //继承TextInputLayout的抽象方法
//得到密码输入TextInputLayout
inputlayoutPassword = (android.support.design.widget.TextInputLayout) findViewById(R.id.password);
inputlayoutPassword.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//TODO 输入改变之前做的操作
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//这儿判断操作,如果输入错误可以给用户提示
if(s.length()<5){
inputlayoutPassword.setErrorEnabled(true);
inputlayoutPassword.setError("密码不能小于6位");
}else{
inputlayoutPassword.setErrorEnabled(false);
}
}
@Override
public void afterTextChanged(Editable s) {
//TODO 输入改变之后做的操作
}
});
}
@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()<5){
inputlayoutUsename.setErrorEnabled(true);
inputlayoutUsename.setError("用户名不能小于6位");
}else{
inputlayoutUsename.setErrorEnabled(false);
}
}
@Override
public void afterTextChanged(Editable s) {
}
}
上述代码,我用两种方式帮大家实现了TextInputLayout的监听事件,大家可以根据自己的项目需求,酌情选择任意一种监听。
下面简单总结下这个Design包中的另一个MD风格的控件
TextInputLayout既可以在输入时把提示语显示与EditText的上方,又能把错误信息提示显示在EditText的下方。
TextInputLayout需要注意的几点:1、TextInputLayout不能单独使用,必须和EditText嵌套使用。
2、 1个TextInputLayout只能包1个EditTExt。
再来看看比较常用的方法
1、setHint();设置提示语
2、setError();设置错误显示信息
3、setErrorEnabled();设置错误信息是否显示。true显示,false不显示。
4、getEditText();得到EditText的控件实例。