Android TV 原生VideoView抢占焦点问题

在遥控操作的Android TV应用中,遇到VideoView初始化时自动抢占焦点导致焦点管理失效的问题。深入分析发现,VideoView内部的焦点处理机制是问题根源。为了解决这个问题,需要采取特定的解决方案来正确管理焦点。

Android TV 原生VideoView抢占焦点问题

在遥控操作的Android TV等产品中,打开含有原生VideoView的Activity时会出现焦点丢失,或者焦点在VideoView上的问题

问题原因为在VideoView初始化中会进行焦点处理,导致无论是在xml中还是其它地方设置都无效

// An highlighted block
    public VideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        mVideoWidth = 0;
        mVideoHeight = 0;
        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        mAudioAttributes = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MOVIE).build();
        getHolder().addCallback(mSHCallback);
        getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		//start 初始化中对焦点的处理
        setFocusable(true);
        setFocusableInTouchMode(true);
        requestFocus();
		//end
        mCurrentState = STATE_IDLE;
        mTargetState = STATE_IDLE;
    }

解决方案:

public class MyVideoView extends VideoView {
    public MyVideoView(Context context) {
        super(context);
        initView();
    }

    public MyVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    public MyVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView();
    }

    public MyVideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        initView();
    }

    private void initView(){
        setFocusable(false);
        setFocusableInTouchMode(false);
        clearFocus();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值