TextInputLayout
TextInputLayout的作用是给EditText提供提示。
注意:一个TextInputLayout只能包含一个EditText。想要多个EditText都时刻有提示,则需要在每一个EditText外层都包一个TextInputLayout。
先上一张运行时截图:
具体的布局文件:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tb_fab"
android:id="@+id/til_fab"
>
<EditText
android:hint="haha"
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/til_fab"
android:id="@+id/til_fab2"
>
<EditText
android:hint="gaga"
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
在布局文件中这样写就可以:
til = (TextInputLayout) findViewById(R.id.til_fab);
til.setHint("haha");
et = til.getEditText();
et.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() < 4) {
til.setErrorEnabled(true);
til.setError("The str's length must > 4");
}
else
til.setErrorEnabled(false);
}
@Override
public void afterTextChanged(Editable s) {
}
});
其中用到了TextInputLayout的几个方法:
1、setHint(Charsequence) 此方法的作用是显式地为EditText提供提示,无论EditText是否获取焦点,如果不调用此方法,那么系统只在EditText获取焦点时,将提示显示在EditText上方。
2、getEditText() 获取TextInputLayout包含的EditText的引用,有了此方法,就不需要通过findViewById的方式获取EditText的引用了
3、setErrorEnabled(boolean) 设置是否可以显示错误信息
4、setError(Charsequence) 设置要显示的错误信息
Snackbar
Snackbar的使用方法类似于Toast,不过它可以添加Action。
直接在代码中使用,如下:
final Snackbar s = Snackbar.make(v, "This is a Snackbar test", Snackbar.LENGTH_SHORT);
s.setAction("Cancel", new View.OnClickListener() {
@Override
public void onClick(View v) {
s.dismiss();
}
});
s.show();
运行图:
Action字体的默认颜色是Theme中的:
<item name="colorAccent">@color/colorText</item>
可以通过方法setActionTextColor(int)设置Action字体的颜色。
注意:
1、make方法的第一个参数是View,可以是整个页面上的任意一个View
2、Snackbar是从窗体底部弹出的