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

相关推荐
闲暇部落19 分钟前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX2 小时前
Android 分区相关介绍
android
大白要努力!3 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee3 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood4 小时前
Perfetto学习大全
android·性能优化·perfetto
Dnelic-7 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记
Eastsea.Chen9 小时前
MTK Android12 user版本MtkLogger
android·framework
长亭外的少年16 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿19 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神20 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri