我已经尝试了所有这些,我可以想到让这个字幕效果起作用。这是我的xml:
<TextView android:id="@+id/curPlaying"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:ellipsize="marquee"
android:scrollHorizontally="true"
android:singleLine="true"
android:marqueeRepeatLimit ="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:textColor="#83A602"
android:textSize="20dp"
android:text="Nothing Loaded" />
我在代码中将其设置为已选中。我认为它可能不起作用的唯一原因是代码会以相对频繁的间隔修改文本。
帮助?
答案 0 :(得分:0)
您可以结帐Marquee feature of TextView in Android 1.1R1,这可以解释选框在获得工作时遇到问题的方法。 ScrollTextView - scrolling TextView for Android可能是个不错的选择。
答案 1 :(得分:0)
您好请尝试下面的代码,它对我来说很好......
<TextView
android:id="@+id/mywidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:lines="1"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="Simple application that shows how to use marquee, with a long text"
android:textColor="#ff4500" />
TextView tv = (TextView) this.findViewById(R.id.mywidget);
tv.setSelected(true); // Set focus to the textview
它正在使用我的三星Galaxy ACE手机。
答案 2 :(得分:0)
我发帖是因为没有可接受的答案....并且有助于未来的访问者来Stack Overflow寻求答案。
public class AlwaysMarqueeTextView extends TextView {
public AlwaysMarqueeTextView(Context context) {
super(context);
}
public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean isFocused() {
return true;
}
}
<强> activity.xml 强>
<ivar.kov.util.textViewUtil.AlwaysMarqueeTextView
android:id="@+id/artist_tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="@string/appbar_scrolling_view_behavior"/>
答案 3 :(得分:0)
如果 TextView
填满整个宽度,则需要添加这些代码行
<TextView
.
.
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
/>
也不要忘记为TexrtView
设置selected
textview.setSelected(true);
如果 TextView
没有填充宽度,唯一的方法就是调用这个方法并将 TextView
传递给它。
fun addMarquee(textView: TextView) {
textView.viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val pixels = textView.measuredWidth - 1
val params = textView.layoutParams
params.width = pixels
textView.layoutParams = params
textView.isSelected = true
textView.ellipsize = TextUtils.TruncateAt.MARQUEE
textView.isSingleLine = true
textView.marqueeRepeatLimit = -1
textView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
注意:此方法仅在 textView 宽度为 wrap_content
时有效。