google提供的 TabLayout 实现顶部导航栏的效果非常方便,但是在TV端,用户是通过遥控来操作的,这时,需要把焦点移动到对应Tab上后,点击确认才可以选中,这种体验不符合我们想要的效果。目标效果:通过遥控的左右按键来切换Tab
以下是快速实现遥控方向键来切换Tab选中的方式:
前提条件,依赖google的:implementation 'com.google.android.material:material:1.1.0’

package com.example;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

import com.google.android.material.tabs.TabLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class TvTabLayout extends TabLayout {
    public TvTabLayout(@NonNull Context context) {
        this(context, null);
    }

    public TvTabLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TvTabLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //子View优先处理焦点
        setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
    }

    @NonNull
    @Override
    public Tab newTab() {
        Tab tab = super.newTab();
        tab.view.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if(b) {
                    tab.select();
                }
            }
        });
        return tab;
    }
}

使用时,用TvTabLayout替代TabLayout即可。

**实现原理:重写父类的newTab()方法,给子view设置焦点监听,获取焦点时调用选中方法。

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐