TextInputLayout
2019-01-21 本文已影响43人
CQ_TYL
介绍:
首先来看一下TextInputLayout,TextInputLayout 是EditText(或者EditText子类)的一个包装类,它主要用于在用户输入文本的时候显示一个浮动标签,也支持显示错误信息和字符计数等功能。同样它也支持密码可见切换按钮,通过setPasswordVisibilityToggleEnabled(boolean)API 或者 xml 中的属性,如果设置该属性为可用(enable),那么当EditText 显示设置的密码时,会显示一个切换密码可见和隐藏的按钮。
TextInputLayout 重要方法和属性:
- app:counterEnabled 字符计数是否可用
代码中对应的方法为:setCounterEnabled(boolean) - app:counterMaxLength 计数最大的长度
代码中对应的方法为:setCounterMaxLength(int ) - app:counterOverflowTextAppearance 计数超过最大长度时显示的文本样式
- app:counterTextAppearance 显示的计数的文本样式。
- app:errorEnabled 显示错误信息是否可用
- app:errorTextAppearance 显示错误信息的文本样式
- android:hint 浮动标签
代码对应方法:setHint(CharSequence) - app:hintAnimationEnabled 控制是否需要浮动标签的动画
代码对应方法:setHintAnimationEnabled(boolean) - app:hintEnabled 控制是否显示浮动标签
代码对应方法:setHintEnabled(boolean) - app:hintTextAppearance 浮动标签的文本样式
代码对应方法:setHintTextAppearance(int) - app:passwordToggleDrawable 密码可见切换图标
代码对应方法:setPasswordVisibilityToggleDrawable(int)或者setPasswordVisibilityToggleDrawable(Drawable) - app:passwordToggleEnabled 控制是否显示密码可见切换图标
代码对应方法:setPasswordVisibilityToggleEnabled(boolean) - app:counterOverflowTextAppearance 设置超出字符数后提示文字的颜色,如果不设置默认为@color/colorAccent的颜色
基础用法:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:hint="账号"
android:paddingLeft="16dp"
android:scrollbarAlwaysDrawHorizontalTrack="true"
app:counterMaxLength="8"
app:counterOverflowTextAppearance="@style/TextOverCount">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@color/black"
android:textColorHint="@color/gray"
android:textSize="14dp"/>
</android.support.design.widget.TextInputLayout>
修改默认样式:
改变TextInputLayout默认下划线颜色和点击时颜色,默认hint颜色,在TextInputLayout控件设置textColorHint设置默认hint颜色
在EditText控件中设置android:theme属性设置 style
<android.support.design.widget.TextInputLayout
android:id="@+id/login_textinput_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/mintcream">
<!--android:textColorHint" 默认hint字体及下划线颜色-->
<EditText
android:id="@+id/login_userId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入账号"
android:inputType="number"
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/darkorange"
android:theme="@style/TextAppTheme" />
<!--textColor设置输入时字体颜色-->
</android.support.design.widget.TextInputLayout>
<!--改变TextInputLayout 里面的EditText默认下划线和点击时下划线的颜色-->
<style name="TextAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlNormal">@color/gray</item><!--默认显示下划线的颜色-->
<item name="colorControlActivated">@color/gray</item><!--点击后下划线的颜色-->
<item name="colorAccent">@color/qmui_config_color_red</item>
</style>
超出字符数后的提示样式:
<style name="TextOverCount" parent="Base.TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">@android:color/holo_red_light</item>
</style>
设置错误提示文字
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_marginTop="20dp"
app:errorEnabled="true" //设置为true
android:id="@+id/textinputlayout_email"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:hint="请输入邮箱"
android:id="@+id/et_email"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
editText_email=findViewById(R.id.et_email);
textInputLayout =findViewById(R.id.textinputlayout_email);
editText_email.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(!RegexUtils.isEmail(charSequence)){
textInputLayout.setError("邮箱格式错误");
textInputLayout.setErrorEnabled(true);
}else {
textInputLayout.setErrorEnabled(false);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
image
设置密码是否可见
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_marginTop="20dp"
app:errorEnabled="true"
app:passwordToggleEnabled="true" //设置为true
android:id="@+id/textinputlayout_password"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:hint="请输入密码"
android:id="@+id/et_password"
android:inputType="textPassword"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
image