Android TV 焦点控制
电视上都是通过控件获取焦点来实现点击效果的
android:focusable="true"//布局文件中设置一个控件能否获得焦点 android:setFocusableInTouchMode="true"//这个是触摸是否能获得焦点,因为有的TV要求遥控 器和触摸都可以用,这时会用到 android:focusedByDefault="true"//设置默认焦点 低版本用不了,不过可以用requestFocus()强制获取焦点 这个属性只能在API 26 或者更高版本中使用,如果你的最低版本低于26则会报错 android:defaultFocusHighlightEnabled="true"//原生控件获取焦点高亮显示 这个属性也能在API 26 或者更高版本中使用,如果你的最低版本低于26则会报错
意思就是可以获取到焦点,为false则不可获取焦点,
在代码里
btnTest.setFocusable(true);//代码中设置一个控件能否获得焦点 btnTest.setFocusableInTouchMode(true);//这个是触摸是否能获得焦点,因为有的TV要求遥控器和触摸都可以用,这时会用到 btnTest.setFocusedByDefault(true);//设置默认焦点 低版本用不了,不过可以用requestFocus()强制获取焦点 这个属性只能在API 26 或者更高版本中使用,如果你的最低版本低于26则会报错 btnTest.setDefaultFocusHighlightEnabled(true);//原生控件获取焦点高亮显示 这个属性也能在API 26 或者更高版本中使用,如果你的最低版本低于26则会报错
为false则不可获取焦点。
在已知控件ID的情况下我们可以设置上下左右的移动控件,
android:nextFocusUp="@id/tv_test"//当按上键时,下一个获得焦点的控件为tv_test android:nextFocusDown="@id/tv_test"//当按下键时,下一个获得焦点的控件为tv_test android:nextFocusLeft="@id/tv_test"//当按左键时,下一个获得焦点的控件为tv_test android:nextFocusRight="@id/tv_test"//当按右键时,下一个获得焦点的控件为tv_test
代码中:
btnTest.setNextFocusUpId(R.id.tv_test);//当按上键时,下一个获得焦点的控件为tv_test btnTest.setNextFocusDownId(R.id.tv_test);//当按下键时,下一个获得焦点的控件为tv_test btnTest.setNextFocusLeftId(R.id.tv_test);//当按左键时,下一个获得焦点的控件为tv_test btnTest.setNextFocusRightId(R.id.tv_test);//当按右键时,下一个获得焦点的控件为tv_test
btnTest.requestFocus()://强制设置一个焦点到指定的view或它的一个子类,(前提是