【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\

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui