TextInputLayout的基本使用

TextInputLayout属于EditText的一个浮动标签,属于Material Design 设计规范中的,效果可以看下面的动图

账号:只是普通EditText

密码:用TextInputLayout包裹的EditText

使用的话TextInputLayout包裹一个EditText就可以。当然TextInputLayout也只能包裹EditText:

<android.support.design.widget.TextInputLayout
   android:id="@+id/tl_etpass"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/et_pass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码" />
</android.support.design.widget.TextInputLayout>

 

具体完整代码:

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="com.wjs.myedittextdemo1.MainActivity">


    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入账号" />

    <android.support.design.widget.TextInputLayout
       android:id="@+id/tl_etpass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/et_pass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码" />
    </android.support.design.widget.TextInputLayout>



    <Button
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="登录" />
</LinearLayout>

 

activity:

package com.wjs.myedittextdemo1;

import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private EditText etName;
    private EditText etPass;
    private Button login;
    private TextInputLayout tlEtpass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();
        initData();
    }

    private void initview() {
        etName = findViewById(R.id.et_name);
        etPass = findViewById(R.id.et_pass);
        tlEtpass = findViewById(R.id.tl_etpass);
        login = findViewById(R.id.login);
    }

    private void initData() {

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                 String name = etName.getText().toString().trim();
                 String passwarld = etPass.getText().toString().trim();
                if (!name.equals("大不懂")) {
                    etName.setError("请输入正确用户名");
                    Toast.makeText(MainActivity.this,"用户名错误",Toast.LENGTH_SHORT).show();
                } else if (!passwarld.equals("123456")) {
                    tlEtpass.setErrorEnabled(true);
                    tlEtpass.setError("请输入正确密码");
                    Toast.makeText(MainActivity.this,"密码错误",Toast.LENGTH_SHORT).show();
                } else {
                    tlEtpass.setErrorEnabled(false);
                    Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

 

进阶修改样式

 

密码:

EditText中添加:android:inputType="textPassword"
TextInputLayout中添加:
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/colorPrimary"

最大长度:

TextInputLayout中添加:

app:counterEnabled="true"
app:counterMaxLength="3"
app:counterOverflowTextAppearance="@style/MyOverflowText"

style:

<style name="MyOverflowText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">#ffe600</item>
</style>

错误提示:

TextInputLayout中添加:

app:errorEnabled="true"
app:errorTextAppearance="@style/MyErrorText"

style:

<style name="MyErrorText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">#ff4444</item>
</style>

默认样式:

TextInputLayout中添加:

app:hintTextAppearance="@style/MyHintText"

EditText中添加:

android:theme="@style/MyEditText"

style:

<style name="MyHintText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">@color/colorPrimary</item>
</style>

<!--Input field style-->
<style name="MyEditText" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">#000022</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:textSize">18sp</item>
</style>

 

完整代码:

xml:

<android.support.design.widget.TextInputLayout
    android:id="@+id/tl_etstyles"
    android:layout_width="match_parent"
    app:errorEnabled="true"
    app:counterEnabled="true"

    app:counterMaxLength="3"
    app:passwordToggleEnabled="true"
    app:passwordToggleTint="@color/colorPrimary"
    app:counterOverflowTextAppearance="@style/MyOverflowText"
    app:errorTextAppearance="@style/MyErrorText"
    app:hintTextAppearance="@style/MyHintText"
    android:layout_height="wrap_content">
    <EditText
        android:theme="@style/MyEditText"
        android:id="@+id/et_styles"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:hint="样式展示" />
</android.support.design.widget.TextInputLayout>

activity:

etStyles = findViewById(R.id.et_styles);
etStyles.addTextChangedListener(mTextWatcher);
private TextWatcher mTextWatcher = 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) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        Editable text = tlEtstyles.getEditText().getText();
        if (!text.toString().equals("123"))
            tlEtstyles.setError("输入123");//show
        else
            tlEtstyles.setError(null);//hide
    }
};

 

style:

<style name="MyHintText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">@color/colorPrimary</item>
</style>

<!--Input field style-->
<style name="MyEditText" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">#000022</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:textSize">18sp</item>
</style>
<style name="MyErrorText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">#ff4444</item>
</style>

<style name="MyOverflowText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textColor">#ffe600</item>
</style>

 

感谢:https://blog.csdn.net/yechaoa/article/details/78699045

源码下载

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android TextInputLayout是一个支持Material Design风格的输入框容器,它可以用来包装任何EditText或EditText的子类,提供了一些功能,如错误提示、计数器、密码可见性切换等。 TextInputLayout的主要功能有: 1.错误提示:当用户输入无效数据时,可以显示错误消息。 2.计数器:可以显示已输入字符的数量和最大字符数量。 3.密码可见性切换:可以在明文和密码模式之间切换。 4.动画效果:包含了一些动画效果,如标签浮动和错误消息上移等。 使用TextInputLayout,需要在XML中将EditText包装在TextInputLayout中,并在TextInputLayout中设置相关属性。例如: ``` <com.google.android.material.textfield.TextInputLayout android:id="@+id/textInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your name"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content"/> </com.google.android.material.textfield.TextInputLayout> ``` 在代码中,可以使用以下方法来设置错误消息、计数器等: ``` // 设置错误消息 textInputLayout.setError("Invalid input"); // 显示计数器 textInputLayout.setCounterEnabled(true); textInputLayout.setCounterMaxLength(50); // 密码可见性切换 textInputLayout.setEndIconMode(TextInputLayout.END_ICON_PASSWORD_TOGGLE); ``` 总之,TextInputLayout是一个非常有用的控件,可以提高Android应用程序的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大不懂

码字不易,一块也是爱,么么

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值