前言
Android开发中,TextView设置android:singleLine=”true”时Android Studio提示用android:maxLines=”1″替换。但是发现使用maxLines之后,没有跑马灯了。
记录一下maxLines和singleLine区别,方便自己查阅。
正文
下面通过例子看两个的区别。
例子
下面是maxLines和singleLine的测试xml。
MarqueeTextView就是封装TextView,之前介绍过,略。
<com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:ellipsize="end" android:focusable="true" android:maxLines="1" android:padding="10dp" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" /> <com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:ellipsize="marquee" android:focusable="true" android:marqueeRepeatLimit="marquee_forever" android:padding="10dp" android:singleLine="true" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" />
运行起来后会发现
都是显示一行
singleLine配置的的有跑马灯,maxLines没有。
从效果来看,如果你要跑马灯就必须使用singleLine。
区别
通过看源码和看其他网友的博客,总结如下。
maxLines
<!-- Makes the TextView be at most this many lines tall. # 翻译为 :使TextView的高度最多为这么多行。 --> <attr name="maxLines" format="integer" min="0" />
也就是说,当我设置如下时
android:maxLines="1"
会使TextView显示一个行的高度内容,超过一行高度的内容就越界不显示,并不会把多行内容放在一行中显示。
因此,为了显示完整[笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^]的内容,我下面maxLines不同行数的显示效果。
<com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:background="@android:color/darker_gray" android:padding="10dp" android:maxLines="1" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" /> <com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:background="@android:color/darker_gray" android:padding="10dp" android:maxLines="2" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" /> <com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:background="@android:color/darker_gray" android:padding="10dp" android:maxLines="3" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" /> <com.biumall.demo.MarqueeTextView android:layout_width="400dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="20dp" android:background="@android:color/darker_gray" android:padding="10dp" android:maxLines="4" android:text="笔友城堡[www.biumall.com],记录美好生活。阅读是一种生活方式^_^" android:textSize="30sp" />
从下图就可以看明白,当设置maxLines为1行时,其他的是被影藏了,并只显示一行高度的内容,只有行数设置阅读,显示的内容就多。
当然,也可以看出设置maxLines替代singleLine时跑马灯失效的原因了。
singleLine
<!-- Constrains the text to a single horizontally scrolling line instead of letting it wrap onto multiple lines, and advances focus instead of inserting a newline when you press the enter key. # 翻译:将文本限制为一行水平滚动的文本,而不是让它换行到多行... --> <attr name="singleLine" format="boolean" />
也就是如果我们设置了
android:singleLine="true"
会使TextView中的内容全部一行显示。加上ellipsize等的配置就会让文本跑起来。
参考文章
《》
《
© 版权声明