如何修复带有填充 android:ellipsize="marquee" 的文本溢出 TextView
How to fix text overflowing TextView with padding android:ellipsize="marquee"
在某些 Android 设备上(LG Google Nexus 5 带有 Android L 和 M)带有 android:ellipsize="marquee" 的 TextView 和填充结果文本溢出文本视图。但是,它出现在 TextView 的右侧而不是左侧,而填充同时应用于左侧和右侧。
它不会出现在三星 Galaxy S3 和 S6 上,分别带有 Android K 和 L。
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:freezesText="true"
android:alpha="0.85"
android:background="@color/by433_gray_darker"
android:textColor="@color/white"
android:textSize="11sp" />
我该怎么做才能解决或解决这个问题?
您的问题是 Android 和 already reported and assigned 在 Android 开源项目上的错误:
您的解决方法可能如下所示:
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:layout_marginBottom="1dp"
android:background="@color/by433_gray_darker">
<TextView
android:id="@+id/textId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:freezesText="false"
android:alpha="0.85"
android:text="super nice text text text text text text text text text text text text text text text text text"
android:textColor="@color/white"
android:textSize="11sp" />
</FrameLayout>
所以,我们的想法是拥有一个带有填充、边距和背景的包装器容器。 (如果你只有几个这样的视图,应该不会有太大的性能开销)
原来的错误答案(虽然有两个TextView)
问题可能是由于您的 TextView 上组合了太多属性。以下是一些建议:
- 首先尝试逐一删除属性检查结果
- 您可以尝试在容器上指定填充而不是文本视图
从你的布局看来你可以尝试这样的事情
而不是 "match_parent" 在您的文本视图中:
<LinearLayout android:orientation="horizontal" ...>
<TextView android:layout_width="0dp" android:layout_weight="1" ... />
<TextView android:layout_width="0dp" android:layout_weight="1" ... />
</LinearLayout>
在某些 Android 设备上(LG Google Nexus 5 带有 Android L 和 M)带有 android:ellipsize="marquee" 的 TextView 和填充结果文本溢出文本视图。但是,它出现在 TextView 的右侧而不是左侧,而填充同时应用于左侧和右侧。
它不会出现在三星 Galaxy S3 和 S6 上,分别带有 Android K 和 L。
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:freezesText="true"
android:alpha="0.85"
android:background="@color/by433_gray_darker"
android:textColor="@color/white"
android:textSize="11sp" />
我该怎么做才能解决或解决这个问题?
您的问题是 Android 和 already reported and assigned 在 Android 开源项目上的错误:
您的解决方法可能如下所示:
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:layout_marginBottom="1dp"
android:background="@color/by433_gray_darker">
<TextView
android:id="@+id/textId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:freezesText="false"
android:alpha="0.85"
android:text="super nice text text text text text text text text text text text text text text text text text"
android:textColor="@color/white"
android:textSize="11sp" />
</FrameLayout>
所以,我们的想法是拥有一个带有填充、边距和背景的包装器容器。 (如果你只有几个这样的视图,应该不会有太大的性能开销)
原来的错误答案(虽然有两个TextView) 问题可能是由于您的 TextView 上组合了太多属性。以下是一些建议:
- 首先尝试逐一删除属性检查结果
- 您可以尝试在容器上指定填充而不是文本视图
从你的布局看来你可以尝试这样的事情 而不是 "match_parent" 在您的文本视图中:
<LinearLayout android:orientation="horizontal" ...> <TextView android:layout_width="0dp" android:layout_weight="1" ... /> <TextView android:layout_width="0dp" android:layout_weight="1" ... /> </LinearLayout>