TextView Marquee не работает
Я перепробовал все, я могу придумать, чтобы этот эффект шатра сработал. Вот мой 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" />
И я устанавливаю это как выбранный в коде. Единственное, почему я думаю, что он может не работать, это то, что текст модифицируется кодом с относительно частыми интервалами.
Помогите?
4 ответа
Привет, пожалуйста, попробуйте ниже код, он работает нормально для меня...
<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
Он работает на моем телефоне Samsung Galaxy ACE.
Вы можете воспользоваться функцией Marquee в TextView в Android 1.1R1, которая объясняет некоторые способы, с помощью которых у Marquee могут возникнуть проблемы при получении работы. ScrollTextView - прокрутка TextView для Android может быть хорошим вариантом.
Я пишу, потому что нет принятых ответов.... и помогает будущим посетителям, которые приходят в 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"/>
Если заполнить всю ширину, вам нужно добавить эти строки кода
<TextView
.
.
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
/>
также не забудьте установить выделенное для
TexrtView
как показано ниже
textview.setSelected(true);
и если не заполняет ширину, единственное, что нужно сделать, это вызвать этот метод и передать
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
.