?原文:Tips for Developing on the JavaFX TV Platform
作者:Larry Hoffman、Jim Holliday
出处:
?
JavaFX TV应用
?
电视平台的功能特性会影响到你的设计在其之上运行的有效用户界面的方法,本文介绍了一些不同于桌面平台的电视平台设计方式,并提供了了一些设计有效的电视应用的技巧和指导。本文还就把为桌面平台编写的应用迁移到电视平台上这一过程提供了一些指引。
?
针对电视平台的应用
?
有一类应用是为电视平台设想并xx从头进行编写的,这类应用的目的是利用该平xx有的特性及优势。(虽然为桌面平台设想并编写的应用通常都可以运行在JavaFX TV配置上,正如把桌面应用迁移到TV上一节中会讨论到的那样。)
?
电子节目菜单
?
TV平台上的典型的“应用杀手”是节目菜单(通常称为电子节目菜单,即electronic program guide,或者EPG),每个有线电视机顶盒或者卫星电视接收器都集成了一个EPG应用。
EPG的某些特点是其很多地方都用到了屏幕这一不变实物(通常是整个屏幕),并依赖于大量的下载自后端和本地存储的数据,它还涉及大量的用户交互。通过JavaFX技术,你可以设计出达到高水平视觉吸引力的EPG,并能够很容易地把它与其他应用和服务整合在一起。
Java技术非常适合于提供端到端的EPG解决方案,把用户的交互与运行在Java Enterprise Edition上的后端服务器连接起来。
?
社交网络化和体育广播
?
以电视为中心的应用的一个富有成果的领域有可能是把社交网络化和体育的现场直播整合到了一起,正在观看体育赛事的球迷被赋予了能够实时与其他球迷直接聊天的能力,或者是让他们能够有机会让自己组建的梦幻球队配合现场的比赛行动。
对于狂热的体育迷来说,这样绝妙的体育应用有可能是非常令人难以抗拒的。例如,在某个富有想象力的足球应用中,用户可以提前组装并保存他们自己的梦幻团队的名单。在观看足球赛季期间的比赛转播时,运动员在联赛中的所有比赛的实时统计数据可由电视运营商或者后端服务器中的服务运营商来组装,于是用户的梦幻球队的比赛表现就可以被实时地计算出来。在已经建立连接的用户之间可以有实时的聊天和评论。电视运营商、服务运营商或者设备制造商可以把这种交互应用作当作额外收费服务来进行收费。
需要再一次说明的是,Java技术是一种连接Java Enterprise Edition服务器来提供端到端解决方案的理想选择,JavaFX是用来为电视平台的用户界面编程的{zj0}选择。
?
信息类小工件
?
信息类小工件(informative widget)为强针对性的应用提供了另一个丰富的领域,这些小工件能够被开发来实时监控各种各样的事件:当地天气、航班信息、体育比分、新闻头条、股票价格以及拍卖清单等等,信息类小工件还可以被开发来通知正在看电视的用户接收邮件或者是SMS信息。
?
JavaFX TV profile编程
?
JavaFX TV方面(JavaFX TV profile)的编程非常类似桌面版的JavaFX平台的编程,不过,电视平台的特性会影响你设计用户界面的方式。本节介绍了JavaFX TV profile编程的一些指导方针和拇指规则,也说明了TV平台上固有的一些开发局限,并提供了一些处理这些局限的指引。
为了方便起见,JavaFX TV控件一节提供了说明所有的JavaFX TV控件的一个参考列表。
?
避免多个应用窗口
?
JavaFX TV这一profile不支持应用中的多个阶段(由JavaFX的Stage类来实现),在这一profile中,所有的阶段都是未修饰的(undecorated)。
?
使用大号字体
?
建议的电视应用的基本字体大小为24磅,字体大小必须是18磅或以上。
?
允许所有的电视显示模式
?
确保你的应用能够很好地呈现在各种电视屏幕上,确保其可以轻松地展现于不同的分辨率下:全高清(1920x1080像素)、准高清(1280x720像素)和(如果可能的话)标清(标准清晰度720x480像素)。
?
使用大尺寸控件
?
确保屏幕上的控件和其他对象对于一个坐在大约十英尺远的观众来说是清晰可见的。(对于更大的电视屏幕来说这个距离应更远。)因为相对于桌面屏幕来说,用户离电视机的屏幕会更远,电视机屏幕上的对象必须比标准的计算机屏幕上的对象要更大一些。一个好的指导准则是在把应用从桌面迁移到电视环境时,把线条的尺寸加大到三倍。
同样的,在绘制外形时不要使用细线条,特别是如果他们包含了曲线或者斜线的话,当使用只有单个像素宽度的线来绘制线条时,这些外形不能被很好的显示在电视机的屏幕上,你应该重写外形的strokeWidth属性,把其值设置为大于1.0。
基于上述原因,TV profile中JavaFX控件的大小被放大三倍,在X和Y维度上都是这样,这适用于各种用来绘制控件的外形或者线条。例如,控件中的一条线条在桌面profile上是一个像素的宽度,则在TV profile上是三个像素的宽度,这是通过CSS来自动实现的,不需要你这方面的任何额外工作。
?
溢出扫描
?
在排列你的应用时,小心避免显示器的边缘,确保应用所画的所有控件至少距离图像平面的边缘有5%的距离。许多电视机显示器采用溢出扫描(overscan)来避免屏幕边缘的显示异常,某些电视机可以显示超出屏幕5%的整个图像画面,就采用溢出扫描的显示器来说,位于显示器边缘的控件会被切掉,使得事情进一步复杂化的是,溢出扫描的变化量取决于显示器。
溢出扫描的考虑使得MenuBar控件很难使用,因为菜单条通常位于屏幕的左上角,你可以使用MenuButton控件作为代替来提供菜单功能,该控件可以远离屏幕的边缘放置。需要注意的是,这一版本的MenuButton控件位于预览包中,预览包中的控件并未同公有控件一样已经进行了彻底的测试,而且在将来的版本中有可能发生改变,欲了解更多信息,请参阅公有与预览控件的对比一节。
?
控件间的用户导航
?
设计好用户使用电视遥控器在控件间的导航,在TV profile环境中,用户使用遥控器按钮来在屏幕上导航,既要把焦点从一个控件移到另一个控件上,又要与控件交互。控件之间的导航是通过左、右、上和下箭头按钮来完成的,选择则是使用OK按钮来完成,当某个控件获得焦点时,它的边缘会改变颜色。
在JavaFX TV平台的这一最初版本中,存在着一些你必须知道的与屏幕导航相关的局限性,这些限制存在于皮肤的缺省设置方面,在未来的版本中可能会被设法解决,开发者可以提供实现了不同的屏幕导航的自定义皮肤。
某些控件还需要内部导航(例如,导航到菜单内部的菜单项),这种内部导航也是使用遥控器按钮来完成的,因为箭头按钮既用来在控件之间,也用来在控件内部导航,因此在排列你的应用的时候,你必须要了解一些设计上的限制。
除了一个之外,所有的控件都需要内部导航,导航限于单个维度——要么上/下,要么左/右,未使用的那个维度则是退出控件的出口路线。通过利用未使用的维度上的箭头键,用户可以退出一个控件,然后就可以使用箭头键来导航到邻近的控件上。例如,Slider控件只可以使用左和右箭头按钮来沿着轨道移动旋钮,但是用户可以使用上或者下箭头按钮来退出控件。以下这一表显示了需要内部导航的控件,以及他们的退出通道。
?
?
在布置用户界面的时候,要了解控件之间可用的退出通道,以及这些通道影响应用中的导航流程的方式。例如,你不应该把Slider或者水平的ListView控件摆在一排控件中,因为退出通道是上或者下箭头按钮,因此在水平方向上直接相邻的控件就不能被直接访问到。
?
使用ScrollView控件
?
ScrollView控件是个特例,因为控件内的内部导航在两个维度上都可用,没有留下退出通道,出于该原因,ScrollView控件{zh0}只用在你能够用一个大的ScrollView控件来填满整个屏幕的情况下。这方面的一个例子是许可协议,用户从头部滚动到尾部,然后在底部点击OK或者Cancel按钮,用户不可能使用遥控器上的箭头键来退出ScrollView,OK或者Cancel按钮会驳回这一请求。
需要注意的是,Button或者其他控件可以内嵌在ScrollView控件之内,ScrollView控件内部的控件之间的导航的工作方式与其在ScrollView控件之外的工作方式一样——通过按下箭头按钮来从一个控件转移到另一个控件上。ScrollView控件会自动地滚动到获得焦点的控件上,不存在内置的到ScrollView控件内部的控件的导航支持,一旦ScrollView获得焦点,应用逻辑必须改变焦点到ScrollView内部的某个控件上。
?
嵌套
?
尽管在标准的JavaFX平台上存在这样的情况,即控件在理论上是能够彼此互相嵌套的,不过,除了ScrollView控件内有限的嵌套支持之外,嵌套在TV profile方面并未得到明确的支持,因此,你不应该期待来自缺省遍历引擎的预先定义的行为。
你可以提供自定义的遍历处理,把其作为应用的一部分,还要注意的是,不可越过的控件(不能获取焦点的控件)是不能被嵌套的,因为遍历引擎不能处理他们。
?
工具提示
?
避免使用ToolTip控件,虽然在理论上这一控件在TV profile中是xx可使用的,但实际上它并不能被用到,工具提示只有当指针箭头停留在没有获得焦点的控件之上时才起作用,这只有在有鼠标一类的箭头时才是可能的,因此在使用远程遥控器导航时它不会起到什么作用。
?
虚拟键盘
?
设计使用虚拟键盘来进行文本输入,JavaFX TV profile提供了一个虚拟键盘,依靠这一虚拟键盘,用户可以使用电视机的遥控器来把文本输入到文本框中,当用户导航到一个文本框上并按下OK按钮时,虚拟键盘就出现了,虚拟键盘如下图所展示的那样,可以注意到,键盘只提供了英文的录入版面。
?
JavaFX TV的虚拟键盘
?
把桌面应用迁移到TV上
?
?
就为什么最初针对桌面的JavaFX应用不能够在TV profile上编译并运行这个问题来说,不存在什么技术上的原因。不过,能够这样做的应用必须是只用到公共profile的API,并且是必须在本文之前描述的电视环境参数之内工作才行。
?
JavaFX的通用profile API包括了应用于所有屏幕的类:桌面显示器、手机和电视机,一方面,其他的JavaFX API包含有利用了只适用于其中一种屏幕,例如桌面环境的特定功能的类。以下这种情况是个例子,对于Swing API和基于Applet的API来说,如果你想编写一个能够运行在所有的屏幕上的应用的话,那么无论何时在实践的时候,你应该只使用通用profile API。
?
在把桌面应用迁移到TV profile上运行之前,你应该考虑几方面的因素。首先,你需要考虑用户界面,在使用TV profle来构建时,应用会自动以较大的尺寸来显示GUI控件和字体,以便与电视机相适应,在迁移桌面应用的时候,你不需要去处理控件和字体的大小。再者,你必须考虑是否要修改应用来处理这一类事情,比如避免多应用窗口、把控件摆在远离屏幕边缘的地方、用户遍历控件,以及在之前的Java FX TV profile编程一节中涉及的所有主题等。
?
小工件风格的应用
?
一般来说,最适宜迁移的桌面应用是专用的小工件风格的应用,这些应用不需要很多的文本输入或者用户交互,一个小工件就是一个轻量级的应用,通常不需要大块的屏幕显示面积,可以快速地调用它然后关闭或是最小化,小工件通常都是可支持数据的,其可能依赖于经由互联网的数据推送(data feed),或者是依赖于内嵌在广播流中的元数据。
小工件风格的应用的例子包括股票行情、天气小工具、新闻头条等等,这一类应用同样适用于三种JavaFX屏幕:桌面、手机和电视,JavaFX 1.3版本的示例中包含了几个JavaFX 的小工件风格的应用。
?
?
?
??????