支持TV端的TvTabLayout
google提供的 TabLayout实现顶部导航栏的效果非常方便,但是在TV端,用户是通过遥控来操作的,这时,需要把焦点移动到对应Tab上后,点击确认才可以选中,这种体验不符合我们想要的效果。目标效果:通过遥控的左右按键来切换Tab以下是快速实现遥控方向键来切换Tab选中的方式:前提条件,依赖google的:implementation 'com.google.android.material:
·
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设置焦点监听,获取焦点时调用选中方法。
更多推荐
已为社区贡献1条内容
所有评论(0)