Android Studio V3.12环境下TV开发教程(三)为电视制作布局

Android Studio V3.12环境下TV开发教程

(转自Android官网https://developer.android.com/training/tv/start)

文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80619108


为电视制作布局

通常从大约10英尺远的地方观看电视屏幕,虽然它比大多数其他Android设备显示器大得多,但这种类型的屏幕不能提供与较小设备相同级别的精确细节和颜色。 这些因素要求您创建具有电视设备的应用布局,以创建有用且令人愉快的用户体验。

本课介绍在电视应用程序中构建有效布局的最低要求和实施细节。

您还应该阅读Android TV Design

使用电视的布局主题

Android 主题可以为电视应用中的布局提供基础。 您应该使用主题来修改要在电视设备上运行的应用活动的显示。 本节介绍您应该使用哪些主题。

Leanback主题

v17 leanback支持库包括Theme.Leanback ,这是电视活动的主题,提供了一致的视觉风格。 我们强烈建议将此主题用于使用v17 leanback类构建的任何电视应用程序。 以下代码示例演示如何将此主题应用于活动:

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:theme="@style/Theme.Leanback">

注意: leanback主题不包含操作栏,因为Android TV应用程序中没有任何操作栏。 如果您的应用使用支持片段(如BrowseSupportFragment ,则您的活动必须扩展FragmentActivity  不要使用试图为操作栏设置主题并产生错误的AppCompatActivity 

java.lang.RuntimeException: Unable to start activity ComponentInfo{...} :
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this
activity.

NoTitleBar主题

标题栏是手机和平板电脑上Android应用的标准用户界面元素,但不适用于电视应用。 如果您不使用v17 leanback类,则应将此主题应用于电视活动,以禁止显示标题栏。 以下来自TV应用程序清单的代码示例演示了如何应用此主题来删除标题栏的显示:

扫描二维码关注公众号,回复: 1533279 查看本文章
<application>
  ...

  <activity
    android:name="com.example.android.TvActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    ...

  </activity>
</application
建立基本的电视布局

电视设备的布局应遵循一些基本指导原则,以确保它们在大屏幕上可用和有效。 按照以下提示构建针对电视屏幕优化的景观布局:

  • 以横向方向构建布局。 电视屏幕始终以横向模式显示。
  • 在屏幕的左侧或右侧放置屏幕导航控件,并保存内容的垂直空间。
  • 使用Fragments创建分为多个部分的UI,并使用视图组(如GridView而不是ListView更好地使用横向屏幕空间。
  • 使用诸如RelativeLayoutLinearLayout类的视图组来排列视图。 该方法允许系统将视图的位置调整为电视屏幕的大小,对齐方式,高宽比和像素密度。
  • 在布局控件之间添加足够的边距以避免混乱的UI。

过扫描

由于电视标准的发展以及总是向观众呈现全屏图像的愿望,电视布局具有一些独特的要求。 出于这个原因,电视设备可能会剪辑应用布局的外部边缘,以确保整个显示屏都被填满。 这种行为通常被称为过扫描 

屏幕元素必须始终对用户可见,应放置在过扫描安全区域内。 在左右边缘上添加48dp的5%余量,并在顶部和底部边缘上添加27dp的布局,以确保该布局中的屏幕元素位于过扫描安全区域内。

用户不直接与之交互的背景屏幕元素不应该被调整或剪裁到过扫描安全区域。 这种方法确保背景屏幕元素在所有屏幕上看起来都正确。

以下示例显示了可包含背景元素的根布局以及具有5%边距且可包含过扫描安全区域内元素的嵌套子布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   >

   <!-- Screen elements that can render outside the overscan safe area go here -->

   <!-- Nested RelativeLayout with overscan-safe margin -->
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_marginTop="27dp"
       android:layout_marginBottom="27dp"
       android:layout_marginLeft="48dp"
       android:layout_marginRight="48dp">

      <!-- Screen elements that need to be within the overscan safe area go here -->

   </RelativeLayout>
</RelativeLayout>

小心:如果您使用v17 leanback类(如BrowseFragment或相关小部件), BrowseFragment过扫描边距应用于布局,因为这些布局已包含过扫描安全边距。

构建可用的文本和控件

电视应用程序布局中的文本和控件应该可以从远处轻松查看和导航。 按照以下提示使您的用户界面元素更易于从远处看到:

  • 将文本分成用户可以快速扫描的小块。
  • 在深色背景上使用浅色文字。 这种风格在电视上更容易阅读。
  • 避免使用既非常窄又非常宽的笔划的轻量级字体或字体。 使用简单的sans-serif字体和抗锯齿来提高可读性。
  • 使用Android的标准字体大小:
    <TextView
          android:id="@+id/atext"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:gravity="center_vertical"
          android:singleLine="true"
          android:textAppearance="?android:attr/textAppearanceMedium"/>
    
  • 确保所有视图小部件都足够大,以便远离屏幕10英尺的人员清晰可见(对于非常大的屏幕,此距离更大)。最好的方法是使用布局相对大小而不是绝对大小,以及与密度无关的像素(倾斜)单位而不是绝对像素单位。 例如,要设置窗口小部件的宽度,请使用wrap_content代替像素测量,并为窗口小部件设置页边距,请使用dip值而不是px值。

有关与密度无关的像素和建筑物布局以处理较大屏幕尺寸的更多信息,请参阅支持多个屏幕 

管理电视的布局资源

常见的高清电视显示分辨率为720p,1080i和1080p。 您的电视布局应以1920 x 1080像素的屏幕尺寸为目标,然后允许Android系统在必要时将布局元素缩小至720p。 一般来说,缩小比例(去除像素)不会降低您的布局演示质量。 但是,升级会导致显示效果,降低布局质量,并对应用的用户体验产生负面影响。

要获得图像的最佳缩放结果,请尽可能将它们作为9贴片图像元素提供。 如果在布局中提供低质量或小图像,则会出现像素化,模糊或颗粒感,这对用户来说不是一个好的体验。 改为使用高质量的图像。

有关优化大屏幕布局和资源的更多信息,请参阅多屏幕设计 

避免布局反模式

有几种构建布局的方法,您应该避免,因为它们在电视设备上不能很好地工作,并导致不良的用户体验。 以下是开发电视布局时应特别不要使用的一些用户界面方法。

  • 重复使用手机或平板电脑布局 - 请勿在未经修改的情况下重复使用手机或平板电脑应用中的布局。 为其他Android设备外观设计的布局不适合电视设备,因此应简化以便在电视上操作。
  • ActionBar - 虽然建议在手机和平​​板电脑上使用此用户界面约定,但它不适用于电视界面。 特别是,由于用遥控器导航这样的菜单很困难,所以强烈建议使用操作栏选项菜单(或任何用于该事项的下拉菜单)。
  • ViewPager - 在屏幕之间滑动可以在手机或平板电脑上运行,但不要在电视上试用!

有关设计适合电视的布局的更多信息,请参阅电视设计指南。

处理大型位图

与任何其他Android设备一样,电视设备的内存量有限。 如果您使用非常高分辨率的图像构建应用布局,或在应用操作中使用许多高分辨率图像,则它可能会迅速进入内存限制并导致内存不足错误。 为了避免这些类型的问题,请遵循以下提示:

  • 仅当图像显示在屏幕上时才加载图像。 例如,当在GridViewGallery显示多个图像时,只在视图的Adapter上调用getView()时才加载图像。
  • 在不再需要的Bitmap视图上调用recycle() 
  • 使用WeakReference在内存Collection存储对Bitmap对象的引用。
  • 如果您从网络获取图像,请使用AsyncTask将其提取并存储在设备上以加快访问速度。 切勿在应用程序的主用户界面线程上执行网络事务。
  • 在下载大图时将大图缩小到更适合的大小; 否则,下载图像本身可能会导致内存不足异常。

有关处理图像时获得最佳性能的更多信息,请参阅高效显示位图 

提供有效的广告

对于起居室环境,我们建议您使用30秒内全屏和可忽略的视频广告解决方案。 必须使用D-pad而非触摸才能访问Android TV上的广告功能,例如解除按钮和点击。

Android TV不提供网络浏览器。 您的广告不得尝试启动网络浏览器或重定向到未获得Android TV设备许可的Google Play商店内容。

注意:您可以使用WebView类登录Google+和Facebook等服务。



猜你喜欢

转载自blog.csdn.net/jiawuhan/article/details/80619108