我在 ListView 中有一些自定义元素,据了解,每个元素只是 LinearLayout 中的一个 TextView。 当文本太长时,我希望 TextView 中的文本是水平滚动的单行。我阅读了很多关于此的帖子,并提出了一个应该有效的解决方案,但我没有让全文滚动,而是将文本剪切到包含 View 的长度,并以三个点结尾。我不想要三个点,但需要滚动整个文本。
这是列表中项目的布局(list_item.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/list_item_selector"
android:orientation="horizontal"
android:paddingBottom="7dp"
android:paddingLeft="15dp"
android:paddingTop="7dp" >
<TextView
android:id="@+id/listText"
style="@style/Text_View_Style_White"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:padding="3dp"
android:selectAllOnFocus="true"
android:singleLine="true"
android:textColor="@drawable/list_item_text_selector" />
</LinearLayout>
我还尝试了 android:focusable="true"
、android:scrollHorizontally="true"
和 android:maxLines="1"
属性,但它们都不起作用。在适配器(扩展了 BaseAdapter)的 getView()
方法中,我在返回 View 之前对 TextView 使用了 setSelected(true)
方法。
我不知道是什么问题。任何帮助将不胜感激。
最佳答案
我今天遇到了同样的问题,并且能够解决。此处列出的解决方案均无效,因此我想我会分享为我修复它的方法。
长话短说: 如果您要动态设置 TextView 的文本,请尝试在代码中而不是在布局 xml 文件中设置所需的“marquee”属性。
更长的版本: 在我的例子中,我在每个项目中都有一个带有适配器的 GridView 和一个 TextView。有些项目的文本太长而无法放入其网格的“单元格”中,因此我希望所有太长的项目都无法滚动几次。由于 TextView 在带有适配器的 GridView 中,文本显然是在代码中设置的,来自适配器的当前项。
经过多次痛苦的调试,我终于想到用代码而不是在布局xml 文件中设置所有选取框设置。这导致 3 个点 (...) 最终离开 TextView 并开始滚动。
这是我的布局文件现在的样子: (注意上面列出的属性都没有在这里设置)
<TextView
android:text="Placeholder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:id="@+id/name"
/>
下面是我的适配器代码:
nameView.setText(name);
nameView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
nameView.setSingleLine(true);
nameView.setMarqueeRepeatLimit(5);
nameView.setSelected(true);
关于android - TextView 安卓 :ellipsize ="marquee" not working as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402911/