做TV端开发也有段时间了,一直想着把学到的知识记录下来,就从这里开始吧
官方文档:developer.android.google.cn/training/tv…
学习一门技术最好的学习资料就是官方文档
一、运行一个Demo跑起来
首先我们创建一个项目
然后在AndroidManifest.xml中activity的标签中加入
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
App将被识别为TV应用
接着配置好模拟器
创建模拟器时分类我们需要选择TV,这样才好与实际运行时的电视盒子匹配
然后我们打开activity_main.xml并加入如下代码
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/drawable_btn_selector"
android:focusable="true"
android:paddingStart="10dp"
android:paddingTop="5dp"
android:paddingEnd="10dp"
android:paddingBottom="5dp"
android:text="Hello"
android:textColor="@color/drawable_text_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="100dp"
android:background="@drawable/drawable_btn_selector"
android:focusable="true"
android:paddingStart="10dp"
android:paddingTop="5dp"
android:paddingEnd="10dp"
android:paddingBottom="5dp"
android:text="World!"
android:textColor="@color/drawable_text_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
创建drawable_btn_selector.xml放入res/drawable加入如下代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape>
<solid android:color="@android:color/holo_orange_dark" />
</shape>
</item>
</selector>
创建drawable_text_selector.xml放入res/color加入如下代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_focused="true" />
<item android:color="@color/black" android:state_enabled="true" />
</selector>
然后运行,
即可出现上图中的画面,如果文字没有变成白色,键盘上方向键按“下”键 ,即可出现焦点选中,这时按下方向键焦点可在两个视图之间跳转
二、说明
安卓当中分为触摸模式和选择模式,选择模式下只有一个视图可以获得焦点,当你使用键盘或者遥控器的“上下左右”键进行导航时,系统会搜索对应方向上的焦点并且让它获得焦点
细心的读者会发现上面我们创建的drawable_btn_selector.xml和drawable_text_selector.xml中包含了android:state_focused="true"的标记,这就是视图被赋予焦点时所具有的状态
而在activity_main.xml中,两个TextView都具有android:focusable="true"属性,这会告知系统此视图可以获得焦点