💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
> 编写:[awong1900](https://github.com/awong1900) - 原文:[http://developer.android.com/training/tv/start/navigation.html](http://developer.android.com/training/tv/start/navigation.html) TV设备为应用程序提供一组有限的导航控件。为你的TV应用创建有效的导航方案取决于理解这些有限的控件和用户操作应用时的限制。因此当你为TV创建安卓应用时,额外注意当用户用遥控器按键,而不是触摸屏时,如何实际导航你的应用程序。 这节课解释了创建有效的TV应用导航方案的最低要求和如何对应用程序使用这些要求。 ### 使用D-pad导航 在TV设备上,用户用遥控器设备的方向手柄(D-pad)或者方向键去控制控件。这类控制器限制为上下左右移动。为了创建最优化的TV应用,你必须提供一个用户能快速学习如何使用有限控件导航的方案。 安卓framework自动地处理布局元素之间的方向导航操作,因此你不需要在应用中做额外的事情。不管怎样,你也应该用D-pad控制器实际测试去发现任何导航问题。接下来的指引是如何在TV设备上用D-pad测试应用的导航。 - 确保用户能用D-pad控制器导航所有屏幕可见的控件。 - 对于滚动列表上的焦点,确保D-pad上下键能滚动列表,并且确定键能选择列表中的项。检查用户可以选择列表中的元素并且选中元素后仍可以滚动列表。 - 确定在控件之间切换是直接的和可预测的。 ### 修改导航的方向 基于布局元素中可选中的元素的相对位置,安卓framwork自动应用导航方向方案。你应该用D-pad控制器测试生成的导航方案。在测试后,如果你想用户以一个特定的方式在布局中移动,你可以在控件中设置明确的导航方向。 > **Note**: 如果系统使用的默认顺序不是很好,你应该仅用这些属性去修改导航顺序。 接下来的示例代码展示如何为TextView布局控件定义下一个控件焦点。 ~~~ <TextView android:id="@+id/Category1" android:nextFocusDown="@+id/Category2"\> ~~~ 接下来的列表展示了用户接口控件所有可用的导航属性。 | 属性 | 功能 | |-----|-----| | [nextFocusDown](http://developer.android.com/reference/android/R.attr.html#nextFocusDown) | 定义用户按下导航时的焦点 | | [nextFocusLeft](http://developer.android.com/reference/android/R.attr.html#nextFocusLeft) | 定义用户按左导航时的焦点 | | [nextFocusRight](http://developer.android.com/reference/android/R.attr.html#nextFocusRight) | 定义用户按右导航时的焦点 | | [nextFocusUp](http://developer.android.com/reference/android/R.attr.html#nextFocusUp) | 定义用户按上导航时的焦点 | 去使用这些明确的导航属性,设置另一个布局控件的ID值(`android:id`值)。你应该设置导航顺序为一个循环,因此最后一个控件返回至第一个焦点。 ### 提供清楚的焦点和选中状态 在TV设备上的应用导航方案的成功是基于用户如何容易的决定屏幕上的界面元素的焦点。如果你不提供清晰的焦点项显示(和用户能操作的选项),他们会很快泄气并退出你的应用。同样的原因,重要的是当你的应用打开或者任何空闲的时间,总是有焦点项可以立即操作。 你的应用布局和实现应该用颜色,大小,动画或者它们组在一起来帮助用户容易地决定下一步操作。在应用中用一致的焦点显示方案。 安卓提供[Drawable State List Resources](http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList)来实现高亮选中的焦点。接下来的示例代码展示了如何为用户导航到控件并选择它时使用视觉化按钮显示: ~~~ <!-- res/drawable/button.xml --> <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/button_focused" /> <!-- focused --> <item android:state_hovered="true" android:drawable="@drawable/button_focused" /> <!-- hovered --> <item android:drawable="@drawable/button_normal" /> <!-- default --> </selector> ~~~ 接下来的XML示例代码对按钮控件应用了上面的按键状态列表drawable: ~~~ <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/button" /> ~~~ 确保在可焦点的和可选中的控件中提供了充分的填充,以便它们的周围高亮清晰可见。 更多建议关于TV应用中设计有效的选中和焦点,看[Patterns of TV](http://developer.android.com/design/tv/patterns.html)。 [下一节: 创建TV播放应用](#)