Android AppCompatTextView横向滚动失效问题求助
解决TextView横向滚动(跑马灯)不生效的问题
我看了你贴的代码,问题大概率出在触发滚动的判断逻辑和RecyclerView场景下的状态维护上,咱们一步步来调整:
1. 修正Adapter里的判断逻辑
你现在的判断条件 tv.getText().toString().length() > tv.getMaxLines() 完全不对——getMaxLines() 返回的是行数(这里你设了singleLine,所以是1),文本长度肯定远大于1,这逻辑根本没意义。正确的做法是判断文本的实际宽度是否超过TextView的可用宽度,这样才会触发滚动:
// 先让TextView完成自身尺寸测量 tv.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); // 用Paint精准测量文本的实际宽度 float textWidth = tv.getPaint().measureText(tv.getText().toString()); // 获取TextView的显示宽度 int viewWidth = tv.getMeasuredWidth(); // 文本宽度超过控件宽度时,开启跑马灯 if (textWidth > viewWidth) { tv.setSelected(true); } else { tv.setSelected(false); // 文本没超出就关闭滚动 }
2. 优化布局属性(确保基础配置正确)
你的布局属性大部分没问题,但可以调整几个细节避免焦点冲突:
- 去掉
android:focusable="true"和android:focusableInTouchMode="true"——在RecyclerView里,Item的焦点会和TextView争抢,反而影响跑马灯;跑马灯生效只需要setSelected(true),不需要依赖焦点。 - 保留核心属性:
android:singleLine="true"(或android:maxLines="1")、android:ellipsize="marquee"、android:marqueeRepeatLimit="marquee_forever"、android:scrollHorizontally="true"。
修改后的布局代码:
<android.support.v7.widget.AppCompatTextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" android:text="Some text that is long enough to trigger marquee effect" android:textSize="24sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/guideline" app:layout_constraintTop_toTopOf="parent" />
3. 处理RecyclerView复用的坑
如果你的TextView是在RecyclerView的Item里,还要注意Item复用导致的selected状态丢失:
- 在Adapter的
onBindViewHolder方法里,每次绑定都要重新执行判断并设置selected状态,不能只设置一次。 - 可以在ViewHolder里缓存测量结果,或者给TextView打Tag,避免重复测量影响性能。
最后验证
确保你的文本长度足够长(超过TextView的显示宽度),然后运行测试——只要setSelected(true)被正确触发,跑马灯应该就能正常滚动了。
内容的提问来源于stack exchange,提问作者Yunus Rajabiy
相关产品推荐
相关产品推荐

