<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.button.MainActivity"
tools:ignore="MergeRootFrame" >
<!--
singleLine:表示在一行里显示
ellipsize表示:如果超出显示范围
start:开头省略
middle:中间省略
end:末尾省略
marquee:在获取焦点的时候滚动显示,需要配合 android:focusableInTouchMode="true" 使用
表示在触摸的时候获取焦点
-->
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:ellipsize="start"
android:singleLine="true"
android:text="按钮111111" />
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:ellipsize="middle"
android:singleLine="true"
android:text="按钮2222222" />
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:ellipsize="end"
android:singleLine="true"
android:text="按钮33333333" />
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="按钮44444444" />
</LinearLayout>
效果如下:
但是如果是TextView组件给它设置ellipsize:marquee和android:focusableInTouchMode="true"属性,并不能让它滚动起来。因为TextView是获取不到焦点的。我们可以继承TextView覆写它的isFocused方法,让它返回ture即可。
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewDebug.ExportedProperty;
import android.widget.TextView;
public class MyTextView extends TextView {
/*
* 覆盖父类的三个构造函数
*/
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context) {
super(context);
}
/**
* 覆写isFocused函数,让它返回true即可
*/
@Override
@ExportedProperty(category = "focus")
public boolean isFocused() {
return true;
}
}
在使用TextView的时候用自定义的MyTextView包名.类名代替,这样文本就能滚动了<com.example.button.MyTextView
android:focusableInTouchMode="true"
android:ellipsize="marquee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"/>