我在 ListView 中有一些自定义元素,据了解,每个元素只是 LinearLayout 中的 TextView。
当文本太长时,我希望 TextView 内的文本成为水平滚动的单行。我阅读了很多关于此问题的文章,并提出了一个应该可行的解决方案,但我没有让全文滚动,而是将文本剪切到包含视图的长度,并以三个点结束。我不需要三个点,但整个文本需要滚动。
这是列表中项目的布局 (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"
and android:maxLines="1"
属性,但它们都不起作用。在里面getView()
适配器的方法(扩展了 BaseAdapter)我使用setSelected(true)
返回 View 之前,在 TextView 上调用方法。
我不知道问题出在哪里。任何帮助将不胜感激。
我今天遇到了同样的问题并且能够解决它。这里列出的解决方案都不起作用,所以我想我应该分享一下为我解决问题的方法。
TL;DR:如果要动态设置 TextView 的文本,请尝试在代码中而不是在布局 xml 文件中设置所需的“选取框”属性。
更长的版本:就我而言,我有一个带有适配器的 GridView 和每个项目中的 TextView。有些项目的文本太长,无法放入网格的“单元格”中,因此我希望所有太长的项目都无法滚动几次。由于 TextView 位于带有适配器的 GridView 中,因此文本显然是从适配器的当前项在代码中设置的。
经过非常痛苦的调试,我终于有了在代码中设置所有选取框设置的想法instead布局 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)