自定义一个TextView控件
public class MarqueeTextView extends AppCompatTextView {
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {
return true; // 关键之处
}
}
xml文件设置四个关键属性
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.MarqueeTextView
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是长文本,我是长文本,我是长文本,我是长文本。"
android:textSize="20sp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"/>
<com.example.MarqueeTextView
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是长文本,我是长文本,我是长文本,我是长文本。"
android:textSize="20sp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"/>
</LinearLayout>
注意
如果只在xml文件中设置了singleLine、ellipsize、focusable、focusableInTouchMode,只有一个控件时可以实现跑马灯效果,当我们的布局比较复杂涉及多个文本控件时,跑马灯效果就会出现问题,只有一个控件能正显示,其他控件无法正常显示。