Android TexView走马灯效果解决焦点问题

Android TexView走马灯效果解决焦点问题

最近在项目中遇到一个ListView和GridView中item文本过长显示不全的问题,我想通过走马灯效果展示这个TextView,我百度查了一下,需要给TextView设置以下属性:

android:singleLine="true"//单行展示
android:ellipsize="marquee" //循环展示
android:marqueeRepeatLimit="marquee_forever"//一直循环
android:focusableInTouchMode="true"//触屏焦点
android:focusable="true"//键盘焦点

但这样做只能在TextView获得焦点时实现跑马灯效果,而一个ListView中有这么多个TextView,那我们只能重写TextView的isFocused()方法,然后使用你自定义的TextView:

public class MarqueeText extends android.support.v7.widget.AppCompatTextView {
    public MarqueeText(Context context) {
        super(context);
    }
    public MarqueeText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //textview是否选中的状态
    @Override
    public boolean isFocused() {
        return true;
    }
}

这样便能让所有TextView都实现走马灯效果了。

但是,

这样设计有一个很大的毛病,就是一旦你的TextView获取焦点后,他的focused状态就永远为true了,也就是说当前界面的其他控件都无法获得焦点了,比如说当前界面的EditText,就算你选中后能显示光标也拉不起小键盘了。

解决办法

先在属性中设置:

android:focusable="false"

自定义的TextView isFocused()返回false,或者直接用TextView:

@Override
public boolean isFocused() {
    return false;
}

在java文件中设置:

textview.setSelected(true);

让TextView本身没有焦点,这样既能实现跑马灯效果,也不会和其他控件抢占焦点了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值