跑马灯不生效的问题

来源:互联网 发布:mwap网站js弹广告 编辑:程序博客网 时间:2024/04/30 07:01

在工作过程中,很多地方需要用到跑马灯,跑马灯的理解是需要获取到焦点才能自动跑起来,但是同一时刻只能有一个控件获取到焦点,那对于需要跑马灯的子控件该怎么办呢,以前无知的我在网上搜索了很多都是使用自定义一个TextView,来使得子控件获取焦点返回true。

MarqueeView:

package com.cultraview.ctvmenu.ui.view;import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.ViewDebug.ExportedProperty;import android.widget.TextView;public class MarqueeView extends TextView {    public MarqueeView(Context context) {        this(context, null);        // TODO Auto-generated constructor stub    }    public MarqueeView(Context context, AttributeSet attrs) {        this(context, attrs, android.R.attr.textViewStyle);    }    public MarqueeView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    @Override    protected void onFocusChanged(boolean arg0, int arg1, Rect arg2) {        // TODO Auto-generated method stub        if (arg0)            super.onFocusChanged(arg0, arg1, arg2);    }    @Override    public void onWindowFocusChanged(boolean hasWindowFocus) {        // TODO Auto-generated method stub        if (hasWindowFocus)            super.onWindowFocusChanged(hasWindowFocus);    }    @Override    @ExportedProperty(category = "focus")    public boolean isFocused() {        // TODO Auto-generated method stub        return true;    }}


但是这样会出现一个问题就是无论是否选中,这个TextView都是一直处于跑马灯状态,有时候会显得十分别扭,有需求是需要在选中的时候才让其跑马灯。

后面才突然发现问题其实很简单,在设置为选中状态的时候,跑马灯也是生效的,不同于焦点同一时刻只能有一个控件获取到焦点,选中状态是可以同时在多个控件上生效的:

子TextView 添加如下属性:

        android:id = "@+id/tv_main_modules"        android:ellipsize = "marquee"        android:singleLine = "true"        android:marqueeRepeatLimit = "marquee_forever"        android:scrollHorizontally="true"

在程序中父控件的 onFocusChange() 焦点响应事件中添加 tv_main_modules.setSelected(hasFocus);使得子TextView控件选中,则跑马灯效果有效




原创粉丝点击