Android 从5.0版本开始,新增了Android Materia Design库,让开发者高效的实现炫酷的UI效果
属性:
app:Theme | 设置下划线或其他的颜色属性 |
---|---|
android.support.design:counterEnabled | 是否显示输入长度计数器 |
android.support.design:counterMaxLength | 设置计数器的最大值,与counterEnabled同时使用 |
android.support.design:counterTextAppearance | 计数器的字体样式 |
android.support.design:counterOverflowTextAppearance | 输入字符大于我们限定个数字符时的字体样式 |
android.support.design:errorEnabled | 是否显示错误信息 |
android.support.design:errorTextAppearance | 错误信息的字体样式 |
android.support.design:hintAnimationEnabled | 是否显示hint的动画,默认true |
android.support.design:hintEnabled | 是否使用hint属性,默认true |
android.support.design:hintTextAppearance | 设置hint的文字样式(指运行动画效果之后的样式) |
android.support.design:passwordToggleDrawable | 设置密码开关Drawable图片,与passwordToggleEnabled同时使用 |
android.support.design:passwordToggleEnabled | 是否显示密码开关图片,需要EditText设置inputType |
android.support.design:passwordToggleTint | 设置密码开关图片颜色 |
android.support.design:passwordToggleTintMode | 设置密码开关图片(混合颜色模式),与passwordToggleTint同时使用 |
效果图:
密码框这里的眼睛是可以更改密码的,只要把TextInputLayout的属性设置app:passwordToggleEnabled="true"
一、添加库依赖
**
在build.gradle 文件中添加这样的代码
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:design:28.0.0'
}
这里的版本号根据自己的需要来写,如果gradle版本是22,可以使用22.2.0,由于我的是28.0.0所以我的design依赖版本也选择的28.0
二、具体使用
TextinputLayout实际上可以看成对EditText加装了一层外壳。
所以我们使用的时候也可以这么使用。
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.design.widget.TextInputLayout
android:layout_marginTop="20dp"
android:id="@+id/input_one"
android:layout_width="match_parent"
app:counterEnabled="true"
app:counterMaxLength="10"
android:hint="请输入您的账户"
app:errorEnabled="true"
android:layout_height="wrap_content">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@mipmap/geren"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:hint="请输入密码"
android:focusableInTouchMode="true"
android:gravity="center_vertical"
app:counterEnabled="true"
app:counterMaxLength="10"
app:errorEnabled="true"
app:passwordToggleEnabled="true"
android:orientation="vertical">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@mipmap/suo"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
</LinearLayout>
JAVA:
package com.example.test50;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
//user
private TextInputLayout mtextInput1;
private EditText editText1;
//password
private TextInputLayout mtextInput2;
private EditText editText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtextInput1 = findViewById(R.id.input_one);
mtextInput2 = findViewById(R.id.input_two);
editText1 = findViewById(R.id.username);
editText2 = findViewById(R.id.password);
editText1.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) {
}
@Override
public void afterTextChanged(Editable s) {
if(mtextInput1.getCounterMaxLength()<editText1.length())
{
mtextInput1.setError("超出字数限制!");
}
else
{
mtextInput1.setErrorEnabled(false);
}
}
});
}
}