【发布时间】:2013-07-01 11:01:59
【问题描述】:
我在 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" 和android:maxLines="1" 属性,但它们都不起作用。在适配器的 getView() 方法(扩展 BaseAdapter)中,我在 TextView 上使用 setSelected(true) 方法,然后返回视图。
我不知道问题出在哪里。任何帮助将不胜感激。
【问题讨论】:
-
我也有同样的问题!我尝试了很多不同的解决方案,但都没有奏效!
-
嗨安德烈,你能发布你的 getView() 吗?谢谢。
-
我认为这里发生了什么很清楚。但是,有两种解决方案,如果没有代码,我无法判断您需要哪一种!所以,告诉我,如果你以编程方式设置你的
ListViews.t.setItemsCanFocus(false),这能解决你的问题吗?如果没有,还有其他东西可以解决它。 -
汤姆,感谢您的回复!实际上,我找到了解决问题的方法。经过一些尝试,我意识到问题出在
android:selectAllOnFocus="true"行。我真的不明白为什么,但这条线给出了我在问题中描述的奇怪行为。现在一切都运行良好,文本已完成,并且当包含视图太长时,它可以按预期滚动。 -
我大概可以解释一下。这是因为在 Listview 的
onLayout中,获得了选定的子sel,并且setSelected被设置为false,因为复杂的条件可以通过几种方式破坏 - 一种是上述方式,一种是您的方式。在gtView中设置setSelected不起作用,因为该步骤被处理之前 listview 对元素执行onLayout。 (需要澄清时请参阅grepcode.com/file_/repository.grepcode.com/java/ext/…!)