TextInputLayout是android.support.design.widget里的一个控件,须要配合EditText一块儿使用才行,并且必须是包裹住EditText,例如:android
<android.support.design.widget.TextInputLayout android:layout_height="wrap_content" app:hintTextAppearance="@style/hintStyle" android:layout_width="match_parent"> <EditText android:layout_width="match_parent" android:layout_height="@dimen/height_150dp" android:layout_margin="@dimen/margin_5dp" android:gravity="top" android:hint="设置输入内容" android:maxLength="120" android:layout_gravity="center_horizontal|top" android:background="@null" android:textColor="@color/light_grey"/> </android.support.design.widget.TextInputLayout>
TextInputLayout是为了检测输入的合法性应运而生的新控件,咱们在平常项目中经常须要检测用户输入字符是否符合要求,必须合法性检查或者字符数目检查,TextInputLayout能够让提示变得灵活和醒目.好比咱们如今就构造一个输入合法手机号的EditText的代码.app
``` public class MainActivity extends AppCompatActivity { @Bind(R.id.et) EditText et; @Bind(R.id.et_input_layout) TextInputLayout etInputLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); et.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } //TextInputLayout的setError方法必须放到onTextChanged里 @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (isMobileNum(s.toString())){ Log.e("输入的是合法的字符串","输入的是合法的字符串"); etInputLayout.setErrorEnabled(false); }else{ Toast.makeText(MainActivity.this,"输入的不是合法的字符串,并让字符串归空",Toast.LENGTH_SHORT).show(); //启动错误提示 etInputLayout.setErrorEnabled(true); etInputLayout.setError("输入的不是手机号"); } isMobileNum(s.toString()); } //当咱们有须要判断输入字符内容长度的要求时,放到afterTextChanged方法里 @Override public void afterTextChanged(Editable s) { //判断输入内容的长度放在此处 } }); } public static boolean isMobileNum(String mobiles) { Pattern p = Pattern .compile("^((13[0-9])|(15[^4,//D])|(18[0,5-9]))//d{8}$"); Matcher m = p.matcher(mobiles); return m.matches(); }
}ide