android - TextView 安卓 :ellipsize ="marquee" not working as expected

标签 android textview marquee

我在 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:scrollHorizo​​ntally="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/

相关文章:

ios - 使用 textView 在 iOS 应用程序中像选取框样式一样从下往上移动文本

javascript - 您好,非 ie 浏览器中的字幕延迟

android - 用相机拍照然后裁剪

android - 按下按钮后延迟更新 TextView

android - 安卓中的 "how to close keyboard with smooth slowly animation"

java - Android TextView 简单动画 SetX

c# - Xamarin 将 View 添加到布局但在屏幕上不可见

HTML 字幕 - 静态文本

java - 无法使用 Intent 启动新 Activity

android - 性能明智的 iOS 扩展文件是否有助于更快地渲染大型 Assets ?