【Android TextView/EditText 不允许换行】android:lines 与 android:maxLines 与 android:singleLine

在开发需求过程中,遇到 要求用户的昵称输入框 单行 输入展示,且有最大字符数限制,于是 就想当然的使用 android:singleLine 属性,结果被 lint 警告了,提示已被废弃,推荐使用android:maxLines;当然我们可以通过给 EditText 文本框增加监听器,屏蔽掉 Enter 键的输入,完成功能。

java 复制代码
// 屏蔽 Enter 键的输入,避免换行
mInfoInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                return (event.getKeyCode() == KeyEvent.KEYCODE_ENTER);
            }
        });
java 复制代码
// EditText 限制最大可输入字符数
mInfoInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxNum)});

当时也没懂这些属性到底啥意思。。。现总结研究分析了一下。这几个属性究竟是什么含义?究竟什么场景下使用呢?

一、android:lines

设置文本的行数,设置两行就显示两行的高度,即使第二行没有数据。

1、不设置 android:inputType="text" 属性。可以看到输入的内容超过了一行,但是控件并不会继续增加高度以显示更多内容,只展示一行的高度

xml 复制代码
<EditText
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:lines="1"
        android:text="fdssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

2、设置 android:inputType="text" 属性。不会自动换行

xml 复制代码
<EditText
		android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:lines="1"
        android:inputType="text"
        android:text="fdssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

二、android:maxLines

如开篇所描述的,该属性作用在 EditText 控件上,并不生效,于是去查 官方 API 文档,如下截图:

也就是说 TextView 使用属性 maxLines 的时候没有问题,如果是可编辑的,比如 EditText 来使用的话,不管是多行显示还是单行显示,必须要使用 inputType 属性,单行的时候 inputType 不要使用 textMultiLine,多行显示是需要使用 textMultiLine 的。

1、不设置 android:inputType="text" 属性。

xml 复制代码
<EditText
		android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:maxLines="1"
        android:text="fdssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

可以这么理解:android:maxLines 是 EditText 最多显示的行数,也就是输入的内容过长需要多行显示时,EditText 最多就是几行的高度 ,下图是 android:maxLines=2 内容超过限定行数的效果,可以看到输入的内容超过了三行,但是控件并不会继续增加高度以显示更多内容

xml 复制代码
<EditText
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:maxLines="2"
        android:text="fdsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

而如果,我们将 maxLines 改成 3

xml 复制代码
<EditText
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:maxLines="3"
        android:text="fdsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

2、设置 android:inputType="text" 属性。不会自动换行(正确的做法)

xml 复制代码
<EditText
		android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:maxLines="1"
        android:inputType="text"
        android:text="fdssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

三、android:singleLine(Deprecated 已废弃)

在 TextView 或者 EditText 设置单行显示的时候,我们最常使用的是 android:singleLine="true" 不过该显示官方不建议使用了,官方建议使用 android:maxLines="1" 来代替。如下测试用例,文本已一行展示

xml 复制代码
<EditText
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:hint="test lines maxlines singleline"
        android:singleLine="true"
        android:text="fdssssssssssssssssssssssssssssssrgrthbgndsfvolegyhreg" />

四、总结

其实,该问题是开发过程中遇到的一个小的细节,查阅 API 文档之后知其所以然,遂在此记录一下,也建议大家有问题可以去官网查询 API。

------至所有正在努力奋斗的程序猿们!加油!!

有码走遍天下 无码寸步难行

1024 - 梦想,永不止步!

爱编程 不爱Bug

爱加班 不爱黑眼圈

固执 但不偏执

疯狂 但不疯癫

生活里的菜鸟

工作中的大神

身怀宝藏,一心憧憬星辰大海

追求极致,目标始于高山之巅

一群怀揣好奇,梦想改变世界的孩子

一群追日逐浪,正在改变世界的极客

你们用最美的语言,诠释着科技的力量

你们用极速的创新,引领着时代的变迁

------乐于分享,共同进步,欢迎补充

------Treat Warnings As Errors

------Any comments greatly appreciated

------Talking is cheap, show me the code

------诚心欢迎各位交流讨论!QQ:1138517609

------CSDN:blog.csdn.net/u011489043

------简书:www.jianshu.com/u/4968682d5...

------GitHub:github.com/selfconzrr\

相关推荐
molong93134 分钟前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin
叶辞树2 小时前
Android framework调试和AMS等服务调试
android
慕伏白4 小时前
【慕伏白】Android Studio 无线调试配置
android·ide·android studio
低调小一4 小时前
Kuikly 小白拆解系列 · 第1篇|两棵树直调(Kotlin 构建与原生承载)
android·开发语言·kotlin
跟着珅聪学java5 小时前
spring boot 整合 activiti 教程
android·java·spring
川石课堂软件测试6 小时前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
2501_915921437 小时前
iOS 26 电耗监测与优化,耗电问题实战 + 多工具 辅助策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915921437 小时前
苹果软件混淆与 iOS 应用加固白皮书,IPA 文件加密、反编译防护与无源码混淆方案全解析
android·ios·小程序·https·uni-app·iphone·webview
倔强的石头1068 小时前
【Linux指南】Linux命令行进度条实现原理解析
android·linux
yeziyfx9 小时前
Android Studio制作.9图(点9图/9Patch图)
android·ide·android studio