Android Material TextInputLayout使用详解

Material Design 系列

  1. Material Design UI方案使用讲解
  2. Material TextInputLayout使用详解
  3. Material ShapeableImageView 使用详解

博客创建时间:2022.05.23
博客更新时间:2022.06.06

以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。


前言

TextInputLayout 主要是作为 EditText 的容器,从而为 EditText 生成一个浮动的 Label,当用户点击 EditText 的时候,EditText 中的 hint 字符串会自动移到 EditText 的左上角。

在这里插入图片描述


hint自动上浮

如图当点击EditText控件时,hint内容会自动往上漂浮,代码如下。

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/userInputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="UserName">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="14sp" />

    </com.google.android.material.textfield.TextInputLayout>

错误自动提示


    app:errorEnabled="true"
    app:counterEnabled="true"
    app:counterMaxLength="8"
    app:hintTextAppearance="@style/hintAppearence"
                
		// 开启错误提示
		errorEnabled;
		// 开启计数
		counterEnabled;
		// 设置输入最大长度
		counterMaxLength;
		//浮动标签样式 
		hintTextAppearance


密码可见性切换

一行代码搞定密码的可见性切换,再也不用ImageView 方案来实现了。

app:passwordToggleEnabled="true"

如果想替换密码可见性的图标,可以如下配置

app:passwordToggleDrawable="@drawable/account_pwd_visible_btn_bg"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_icon_outline_eye" android:state_checked="true" />
    <item android:drawable="@drawable/ic_icon_outline_eye_close" android:state_checked="false" />
</selector>

常用API

常用方法

方法介绍
setCounterEnabled在此布局中是否启用了字符计数器功能。
setCounterMaxLength设置要在字符计数器上显示的最大长度。
setBoxBackgroundColorResource设置用于填充框的背景色的资源。
setBoxStrokeColor设置轮廓框的笔触颜色。
setCounterOverflowTextAppearance使用指定的 TextAppearance 资源设置溢出字符计数器的文本颜色和大小。
setCounterOverflowTextColor使用 ColorStateList 设置溢出字符计数器的文本颜色。(此文本颜色优先于 counterOverflowTextAppearance 中设置的文本颜色)
setCounterTextAppearance使用指定的 TextAppearance 资源设置字符计数器的文本颜色和大小。
setCounterTextColor使用 ColorStateList 设置字符计数器的文本颜色。(此文本颜色优先于 counterTextAppearance 中设置的文本颜色)
setErrorEnabled在此布局中是否启用了错误功能。
setErrorTextAppearance设置来自指定 TextAppearance
setErrorTextColor设置错误消息在所有状态下使用的文本颜色。
setHelperText设置将在下方显示的帮助消息 EditText。
setHelperTextColor设置辅助状态在所有状态下使用的文本颜色。
setHelperTextEnabled在此布局中是否启用了辅助文本功能。
setHelperTextTextAppearance设置指定 TextAppearance 资源中的辅助文本的文本颜色和大小。
setHint设置要在浮动标签中显示的提示(如果启用)。
setHintAnimationEnabled是否获取焦点的时候,hint 文本上移到左上角开启动画。
setHintEnabled设置是否在此布局中启用浮动标签功能。
setHintTextAppearance从指定的 TextAppearance 资源设置折叠的提示文本的颜色,大小,样式。
setHintTextColor从指定的 ColorStateList 资源设置折叠的提示文本颜色。
setPasswordVisibilityToggleEnabled启用或禁用密码可见性切换功能。

XML属性

属性介绍
app:hintTextAppearance=“@style/HintAppearance”浮动标签字体样式
app:errorTextAppearance=“@style/ErrorAppearance”错误提示字体样式
app:counterTextAppearance=“@style/CounterAppearance”没有超过最大字数时统计字体样式
app:counterOverflowTextAppearance=“@style/CounterOverflowAppearance”超过最大字数时统计字体样式
app:passwordToggleDrawable密码可见切换图标
app:passwordToggleEnabled控制是否显示密码可见切换图标
app:counterOverflowTextAppearance设置超出字符数后提示文字的颜色,如果不设置默认为@color/colorAccent的颜色
boxBackgroundMode框背景的模式,可以是filled,outline或none。
boxBackgroundColor文本字段背景的颜色。默认启用的颜色colorOnSurface用于填充的框文本字段和透明的框文本字段。
boxStrokeColor文本字段背景周围的笔触颜色。轮廓框文本字段的默认颜色是(在默认状态下)colorOnSurface,填充的框文本字段将被忽略。
hintTextColor/ errorTextColor/ counterTextColor各种不同的文本颜色。
shapeAppearance文本字段背景的形状外观。默认值为shapeAppearanceSmallComponent

总结

Material Design 提供了大量的UI控件且丰富了UI风格,这里有我总结的一系列Material控件的使用总结,欢迎阅读。

一些常见的不同蒙层方案总结于此,希望对爱学习的你有帮助!
有兴趣可以查看源码源码Demo>>
在这里插入图片描述


相关链接

  1. Material Design UI方案使用讲解
  2. Material TextInputLayout使用详解
  3. Material ShapeableImageView 使用详解

扩展链接:

  1. Android CameraX 使用入门
  2. Android 今日头条屏幕适配详细使用攻略
  3. Android 史上最新最全的ADB及命令百科,没有之一

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

<think>好的,我现在需要回答用户关于Linux shell中重定向符号`>/dev/null 2>&1`的问题。首先,我要确认自己对这个符号的理解是否正确。 用户的问题是想了解这个命令的含义,特别是将输出重定向到/dev/null并合并错误流。我记得在Linux中,文件描述符1是标准输出(stdout),2是标准错误(stderr)。而`>/dev/null`是将标准输出重定向到空设备,也就是丢弃输出。然后`2>&1`的意思是将标准错误重定向到标准输出的位置,也就是同样丢弃错误信息。所以整个命令的作用是让命令的执行既不显示输出也不显示错误信息。 不过我需要确认一下顺序是否正确,因为有时候顺序会影响结果。比如,如果写成`2>&1 >/dev/null`,这样可能错误输出还是会被显示,因为先重定向了stderr到stdout的当前位置(即终端),然后再把stdout重定向到/dev/null。而正确的写法应该是先改变stdout的位置,再将stderr指向stdout的新位置,也就是`>/dev/null 2>&1`。这一点需要注意,用户可能会混淆顺序带来的不同效果。 另外,用户提到“merge error stream”,也就是合并错误流到输出流中。这时候如果使用`&>`或者`>&`这样的符号,例如`command &>/dev/null`,也可以达到同样的效果,可能更简洁。不过用户的具体例子是分开写的,可能需要解释这两种方式的异同。 还要考虑是否有其他相关知识点需要提及,例如不同的shell(如bash、zsh)在处理这些重定向时是否有差异,或者是否有类似的问题需要注意,比如子进程是否会影响重定向的结果。比如引用[1]中提到,在bash中某些情况下父进程可能不会等待所有子进程完成,这可能会影响重定向的日志处理。不过用户的问题可能不涉及这些复杂情况,但可能需要简要提及不同shell的差异。 接下来,我需要组织回答结构,首先解释每个部分的含义,然后整体作用,再举例说明,最后可能给出常见使用场景。同时,按照用户的要求,生成相关问题,可能需要包括重定向的其他用法、不同shell的区别、/dev/null的作用等。 在检查LaTeX格式时,用户提到数学表达式要用$...$,但这个问题可能不涉及数学公式,所以可能不需要使用。不过如果有涉及到变量或代码中的符号,可能需要确保格式正确。例如,在解释文件描述符时,可以用$1$和$2$表示,如文件描述符$1$代表标准输出,文件描述符$2$代表标准错误。 另外,用户要求用中文回答,所以要注意用词准确,避免术语错误。例如,“重定向”是正确的术语,而“合并错误流”可能需要更准确的表达,比如“将标准错误重定向到标准输出的位置”。 最后,生成相关问题的时候,要确保问题相关且有价值,比如询问其他重定向符号、错误处理的方法、不同shell的差异等。 总结一下,回答的结构大致如下: 1. 解释>/dev/null的作用 2. 解释2>&1的作用 3. 整体命令的作用 4. 顺序的重要性 5. 其他等效写法 6. 使用示例 7. 应用场景 8. 相关问题 需要确保每个部分都准确无误,并且引用相关的引用内容,如果有必要的话。但在这个问题中,用户的引用似乎更多是关于其他例子,比如tee命令和QEMU,可能和当前问题无关,所以可能不需要引用。但根据用户的系统指令,回答中引用的段落末尾需要添加引用标识,所以需要检查是否有需要引用的地方。例如,在提到不同shell的行为差异时,可以引用用户提供的引用[1]中的内容,说明bash和其他shell在处理子进程时的不同,但可能这更多是关于后台进程和重定向的完成时机,而不是当前问题的核心。如果和当前问题相关,可以提及,否则可能不需要。 因此,最终的思考是,用户的问题核心在于重定向的语法和含义,所以重点放在解释各个部分,顺序的重要性,以及常见用法。可能不需要涉及引用中的内容,除非在讨论相关问题时有涉及。</think>在Linux shell中,`>/dev/null 2>&1` 是**同时丢弃标准输出和标准错误**的重定向操作,具体含义如下: --- ### 分步解释 1. **`>/dev/null`** 将**标准输出(文件描述符$1$)**重定向到空设备`/dev/null`,即丢弃所有正常输出。 - 例如:`ls >/dev/null` 执行后屏幕不显示任何结果。 2. **`2>&1`** 将**标准错误(文件描述符$2$)**重定向到**标准输出的当前目标**(即`/dev/null`)。 - 注意顺序:需先指定标准输出的目标,再重定向标准错误。若写反(如`2>&1 >/dev/null`),错误仍会输出到终端[^1]。 --- ### 整体作用 - 命令的**正常输出和错误信息均被丢弃**,适用于只关注命令执行结果(通过`$?`获取返回值)、不关心输出的场景。 - 等效写法:`&>/dev/null`(更简洁,但某些旧版本shell不支持)。 --- ### 示例 ```bash # 执行命令并静默所有输出 grep "keyword" large_file.txt >/dev/null 2>&1 ``` - 若`grep`找到匹配内容,结果不显示;若文件不存在,错误信息也不显示。 --- ### 应用场景 1. **后台任务**:避免日志污染终端。 2. **脚本中非关键操作**:如临时文件清理。 3. **性能测试**:减少I/O开销对计时的影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值