自定义滚动文本

<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="哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"/>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值