在开发需求过程中,遇到 要求用户的昵称输入框 单行 输入展示,且有最大字符数限制,于是 就想当然的使用 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\