【Android知识点精讲】(8)TV UI设计

本文出处:http://blog.csdn.net/scarthr/article/details/42194659

TV UI就是指Android系统的数字电视的图形交互界面。TV UI最大的特点就是屏幕大,为此我们要解决好以下3个问题:

1. 为大屏幕提供适当的布局源文件

2. 保证UI在一定距离仍然可以看清

3. 为高清电视提供高分辨率图标和图像


一 TV UI布局

1. 把屏幕上导航控制菜单放在屏幕的左边或右边,并且将菜单内容以垂直的方式显示。
2. 创建分段UI时,通过使用Fragment和GridView来替代ListView,充分利用水平空间视图。
3. 使用RelativeLayout和LinearLayout进行布局。这两种布局使Android系统能够针对大小、对齐、纵横比以及屏幕的像素密度来匹配视图的位置。
4. 在视图控制之间提供足够的余地来避免一个杂乱的用户界面。
5. 把文本插入用户能够快速扫描到的小块中
6. 背景色和文字要有鲜明的颜色对比。
7. 使用与密度无关的像素单元(dp和sp)而不是绝对的像素单元。
8. 尽量在高分辨率下调整UI,这样当屏幕分辨率降低时,也可以适配。图片方面,尽量使用9.png的格式来作图。

二 TV UI导航设计

1. 确保所有布局都处于按键导航控制之下。
2. 为可视化的导航提供清晰的反馈
3. 通过合理的布局,使每一个UI更容易方位。

当你在为遥控器设计导航时,要遵循以下原则:
1. 确保遥控器可以控制界内所有的控件。
2. 用上下键控制列表滚动时,当用确认键选中列表的某项时,确保列表仍然可以滚动。
3. 可控元素之间的移动需要简洁和可预测。

为焦点和选择状态提供清晰的显示,可以在drawable文件夹内创建xml文件实现:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 选择状态 -->
    <item android:drawable="@drawable/tab_wy_now" android:state_selected="true"/>
    <!-- 按下状态 -->
    <item android:drawable="@drawable/tab_wy_now" android:state_pressed="true"/>
    <!-- 取得焦点状态 -->
    <item android:drawable="@drawable/tab_wy_now" android:state_focused="true"/>
    <!-- 悬浮状态 -->
    <item android:drawable="@drawable/tab_wy_now" android:state_hovered="true"/>
    <!-- 默认状态 -->
    <item android:drawable="@drawable/tab_wy"/>

</selector>

用户通过按尽可能少的按键导航到任何一个UI,导航应该简单易懂,对于稍显复杂的操作,需要提供带帮助功能的按钮、图标,用户一点击就弹出一个帮助对话框提示用户接下来的操作。
预测用户可能会切换的下一组界面,我们可以提供一个具有提现用户意图的导航。如果当前界面剩余空间很大,考虑吧屏幕分成多面板,可以用Fragment组成带有多个面板的界面。例如:在屏幕左边放置一个包含主标题列表的面板,右边就放置对应的包含副标题列表的面板。

三  TV不支持的功能

相机:android.hardware.camera

导航GPS:android.hardware.location.gps

麦克风:android.hardware.microphone

近场通信(NFC):android.hardware.nfc

通话:android.hardware.telephony

触屏:android.hardware.touchscreen

这些功能通常都是TV所不支持的。

如何设置Android系统不带有触摸功能呢?

在Manifest中配置:

    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
就可以安装到不支持的Android系统中。

通常电视是没有内置GPS的,如果你的程序需要用到地理位置信息,那么可以使用“static location provider”得到这些信息,这种方式是通过查询邮编完成的:

		LocationManager manager = (LocationManager)
				.getSystemService(Context.LOCATION_SERVICE);
		Location location = manager.getLastKnownLocation("static");
查出的结果保存在location对象中。
下面是检测当前可用性的代码,来区别是手机还是TV。

		if (getPackageManager().hasSystemFeature("android.hardware.telephony")) {
			Log.i("Mobile Test", "该设备是手机");
		} else if (getPackageManager().hasSystemFeature(
				"android.hardware.touchscreen")) {
			Log.i("Tablet Test", "该设备不支持通话,但是支持触屏");
		} else {
			Log.i("TV Test", "该设备是TV");
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值