Kevin Learn Android:TextInputLay
2021-06-29 本文已影响0人
Kevin_小飞象

前言

引入 material 包:
implementation 'com.google.android.material:material:1.2.1'
属性
属性 | 含义 |
---|---|
counterEnabled | 字符计数是否可用 |
counterMaxLength | 计数最大的长度 |
counterOverflowTextAppearance | 计数超过最大长度时显示的文本样式 |
counterTextAppearance | 显示的计数的文本样式 |
errorEnabled | 显示错误信息是否可用 |
errorTextAppearance | 显示错误信息的文本样式 |
hint | 浮动标签 |
hintEnabled | 控制是否显示浮动标签 |
hintTextAppearance | 浮动标签的文本样式 |
passwordToggleDrawable | 密码可见切换图标 |
passwordToggleEnabled | 控制是否显示密码可见切换图标 |
使用
-
带浮动标签的文本框
002.gif
布局文件
<?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">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
app:counterOverflowTextAppearance="@style/TextOverCount"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:textColorHint="@color/black">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名"
android:background="@color/white"
android:inputType="text"
android:textColor="@color/black"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
app:counterOverflowTextAppearance="@style/TextOverCount"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:textColorHint="@color/black">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:hint="手机号码"
android:inputType="number"
android:textColor="@color/black"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/materialButton"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="登录"
android:textAllCaps="false" />
</LinearLayout>
-
带字符计数的文本框
002.jpg
布局
<?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">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_input_layout_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColorHint="@color/black">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/text_input_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用户名"
android:background="@color/white"
android:inputType="text"
android:textColor="@color/black"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
app:counterOverflowTextAppearance="@style/TextOverCount"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:textColorHint="@color/black">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:hint="手机号码"
android:inputType="number"
android:textColor="@color/black"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/materialButton"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="登录"
android:textAllCaps="false" />
</LinearLayout>
在 Activity 中设置,计数的长度:
public class MainActivity extends BaseActivity {
@BindView(R.id.text_input_layout_user)
TextInputLayout mTextInputLayout;
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public void initView() {
// 设置可以计数
mTextInputLayout.setCounterEnabled(true);
// 计数的最大值
mTextInputLayout.setCounterMaxLength(10);
}
}
-
显示密码可见和隐藏的切换按钮
03.jpg
布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:counterEnabled="true"
app:counterMaxLength="3"
app:counterOverflowTextAppearance="@style/MyOverflowText"
app:errorEnabled="true"
app:errorTextAppearance="@style/MyErrorText"
app:hintTextAppearance="@style/MyHintText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:background="@color/white"
android:hint="用户名"
android:paddingStart="0dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_name"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/green_deep_color">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:hint="密码"
android:inputType="textPassword"
android:paddingStart="0dp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="8dp"
android:text="登录"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/til_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
在 Activity 中设置:
public class MainActivity extends BaseActivity {
@BindView(R.id.til_name)
TextInputLayout mLayoutName;
@BindView(R.id.et_name)
TextInputEditText mName;
@BindView(R.id.btn_login)
MaterialButton mLogin;
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public void initView() {
mName.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) {
mLayoutName.setErrorEnabled(false);
}
@Override
public void afterTextChanged(Editable s) {
}
});
mLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mName.getText().toString().trim();
if (name.length() > mLayoutName.getCounterMaxLength()) {
mLayoutName.setError("输入内容超过上限");
}
}
});
}
}
style 风格
<style name="MyHintText" parent="TextAppearance.AppCompat.Small">
<item name="android:textColor">@color/light_grey_color</item>
</style>
<style name="MyEditText" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/light_grey_color</item>
<item name="colorControlActivated">@color/black</item>
<item name="android:textSize">18sp</item>
</style>
<style name="MyErrorText" parent="TextAppearance.AppCompat.Small">
<item name="android:textColor">@color/red_deep</item>
</style>
<!--Overflow label text style-->
<style name="MyOverflowText" parent="TextAppearance.AppCompat.Small">
<item name="android:textColor">@color/orange</item>
</style>