原文链接:http://android.eoe.cn/topic/ui
当你应用程序运行在电视机时,你应当考虑用户是坐在距离电视屏幕10英尺的地方.当然用户环境被称为10-foot UI.为了给你的用户提供一个可用和愉快的体验,你相应地应该奠定你自己的UI风格...
这个要点向你展示如何针对TV来优化你自己的布局,通过:
- * 为景观模式提供适当的布局源文件.
- * 确保文本和相应的控制在一定距离上是足够大以便看见的.
- * 为高清电视提供高分辨率的位图和图标.
设计景观布局
电视屏幕通常都是取决于景观.针对电视屏幕按照这些技巧来优化你的景观布局:
- * 把屏幕上的导航控制菜单放在屏幕的左边或者右边,并且将菜单内容以垂直的方式显示.
- * 创建那些分段的UI时,通过使用Fragments和使用像用GridView来替代ListView更能充分使用水平空间的视图组控件.
- * 使用视图组例如RelativeLayout和LinearLayout来排版视图.以上这些允许android系统能够针对大小,对齐,纵横比,以及屏幕的像素密度来匹配视图的位置
- * 在视图控制之间提供足够的余地来避免一个杂乱的用户界面.
例如接下来的布局就是针对TV优化的:
在这个布局中,控制是位于左边界.这个UI界面里面显示了一个GridView控件,这个GridView是非常适合景观方向的UI.在这个布局中GridView和Fragment
都是动态设置宽和高,以便能自适应屏幕的分辨率.在运行时控制视图被添加到了左边片段编程.这UI布局文件位res/layoutlandlarge/photogrid_tv.xml下.(这个布局文件放置在layout-land-large,因为电视在景观方向上有大的屏幕.详细请参考Supporting Multiple Screens.)
例如如下一个res/layout-land-large/photogrid_tv.xml:
1 2 3 4 5 6 7 8 9 10 11 12 |
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/leftsidecontrols"
android:layout_width="0dip"
android:layout_marginLeft="5dip"
android:layout_height="match_parent" />
<GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
|
为了在屏幕的左边设立操作条选项,你可以在你的应用程序中通过导入Left navigation bar library来实现它,以替代创建一个定制的片段来添加控制视图:
1 |
LeftNavBar bar = (LeftNavBarService.instance()).getLeftNavBar(this);
|
当你有一个内容垂直滚动的活动时,总是使用一个左边导航条;反之,你的用户不得不拖动到内容的顶部来在内容视图和操作条之间进行切换.参考Left navigation bar sample app来看看它是如何简单的在你的应用程序中导入左边导航条的.
使文字和控制容易看到
在一个电视的应用程序的UI里,文字和控制应当是容易看见并且在一定距离内可以导航的.例如这些技巧能让它们在一定距离内更加容易看见:
- * 把文本插入用户能够快速地扫描到的小块中.
- * 在一个黑暗的背景中使用明亮的文本.这个风格在一台电视中更方便读.
- * 避免轻量级的字体以及那些要么非常窄要么非常宽的笔画字体.使用简单的无衬线字体和使用抗混叠来提高可读性.
- * 使用系统的标准的字体大小:
1 2 3 4 5 6 7 |
<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英尺的人能清晰可见.要实现它的最好方式是采用相对布局大小而不是绝对布局大小,并且采用密度无关的像素单元而不是绝对的像素单元.例如,设置容器的宽,使用实际的大小来替代像素尺寸,并且设置与父组件的距离,使用dip像素单元替代px像素单元.
针对高分辨率大屏幕设计
普遍的高清电视显示分辨率是720p,1080i,和1080p.把你的UI设置为1080p,并且允许系统在必要的时候将你的UI分辨率下调到720p.通常下调并不意味着是缩小你的UI界面(注意反之则不然,你应该避免倍增,因为它会降低UI质量).
为了获得最佳的图片显示,如果可能的话以9-patch image元素来展示.在你的布局中如果提供低质量或者小图片的话,它们将会出现像素化,模糊,或呈颗粒状.对用户来说这不是一个好的用户体验.取而代之的是采用高质量的图片.
在大屏幕上针对优化应用的更多信息请参考Designing for multiple screens.
设计处理大的位图
android系统有一个内存限制量,所以在你的应用程序中下载和保存一个高分辨率的图片经常会导致内存溢出的错误.为了避免这些,使用如下这些技巧:
- * 仅当它们被显示在屏幕上的时候进行加载.例如,当在GridView和Gallery中显示多组图片时,当在视图的Adapter中调用android.view.View, android.view.ViewGroup) getView()方法时加载图片.
- * 在不在需要的bitmap视图中调用recycle())方法.
- * 在内存回收器重采用WeakReference来存储涉及到的位图对象.
- * 如果你从网络下载图片,使用AsyncTask来下载它们并且将它们保存在sdcard方便快速访问.在应用程序的UI线程中永远也不要处理网络交互.
- * 当你下载它们时按比例缩小原来大的图片到一个更适合它的大小;否则下载图片本身可能会导致内存溢出异常.这里有一个在执行下载的时候按比例缩小图片的范例代码:
范例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// Get the source image's dimensions
BitmapFactory.Options options = new BitmapFactory.Options();
// This does not download the actual image, just downloads headers.
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(IMAGE_FILE_URL, options);
// The actual width of the image.
int srcWidth = options.outWidth;
// The actual height of the image.
int srcHeight = options.outHeight;
// Only scale if the source is bigger than the width of the destination view.
if(desiredWidth > srcWidth)
desiredWidth = srcWidth;
// Calculate the correct inSampleSize/scale value. This helps reduce memory use. It should be a power of 2.
int inSampleSize = 1;
while(srcWidth / 2 > desiredWidth){
srcWidth /= 2;
srcHeight /= 2;
inSampleSize * = 2;
}
float desiredScale = (float) desiredWidth / srcWidth;
// Decode with inSampleSize
options.inJustDecodeBounds = false;
options.inDither = false;
options.inSampleSize = inSampleSize;
options.inScaled = false;
// Ensures the image stays as a 32-bit ARGB_8888 image.
// This preserves image quality.
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(IMAGE_FILE_URL, options);
// Resize
Matrix matrix = new Matrix();
matrix.postScale(desiredScale, desiredScale);
Bitmap scaledBitmap = Bitmap.createBitmap(sampledSrcBitmap, 0, 0,
sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true);
sampledSrcBitmap = null;
// Save
FileOutputStream out = new FileOutputStream(LOCAL_PATH_TO_STORE_IMAGE);
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
scaledBitmap = null;
|
相关推荐
在Android开发中,针对TV应用的设计是一项重要的任务,因为电视用户与手机或平板电脑的用户在交互方式和观看距离上存在显著...在实际开发中,还需要进行多设备测试和用户反馈迭代,以不断优化和完善TV应用的布局设计。
开发Android TV应用时,测试是关键,这包括使用真实设备或模拟器进行遥控器输入测试,以及使用Android TV特有的布局工具进行UI测试。 通过深入理解和利用Android TV Leanback项目,开发者可以快速构建出符合TV用户...
在Android开发中,RecyclerView是一个非常重要的组件,尤其在Android TV这样的大屏幕设备上,它扮演着展示大量数据...在开发过程中,关注焦点处理、布局管理、性能优化和用户体验,将有助于打造成功的Android TV应用。
3. **大屏幕布局**:TV应用的界面设计应考虑大屏幕的显示,使用适当的布局和尺寸单位(如dp而非sp)。此外,使用`GridLayout`、`ListRow`和`GridRow`等组件可以使内容更易于浏览。 4. **焦点管理**:TV应用中的焦点...
在解压的文件"jellyfin-androidtv-master"中,我们可以期待找到该项目的主要源代码、资源文件和其他构建相关材料。这些文件通常包括: 1. **源代码**:项目的主要代码库,通常由Java或Kotlin编写,以适应Android...
对于TV应用,由于界面和交互方式的特殊性,通常需要自定义键盘来适应遥控器的控制。 自定义键盘的设计通常包括以下步骤: 1. 创建键盘布局:使用XML布局文件设计键盘的键位,包括字母、数字、符号等。每个键可以是...
这个"androidtv"的Demo项目是为了帮助开发者更好地理解和实践如何构建适用于电视的应用程序。下面将详细介绍Android TV开发的相关知识点,以及如何利用提供的"tvapp"文件进行学习。 一、Android TV 平台概述 ...
通过01 AndroidTV概述.pptx,你可以了解到Android TV的基础架构、特点以及与传统Android设备的区别。 2. **管理TV硬件资源** 电视硬件资源的管理对于优化TV应用的性能至关重要。02 管理TV硬件资源.pptx将详细讲解...
在Android平台上,为电视设备开发应用时,"Leanback风格"是目前广泛采用的设计模式,尤其针对Android TV应用。这个风格旨在提供一个直观且用户友好的界面,优化大屏幕用户体验。 Leanback风格的设计理念是充分利用...
Android TV应用基于标准的Android应用程序架构,但针对电视设备进行了优化。它通常包括一个主屏界面( Leanback Launcher),显示可浏览的内容网格,以及各个应用内的详细视图和播放界面。 2. **Leanback库** ...
【标题】"androidTV仿电视3d翻页效果源码"所涉及的知识点主要集中在Android TV应用开发领域,特别是关于用户界面(UI)动画的设计和实现。3D翻页效果是一种常见的过渡动画,用于增强用户体验,使应用界面更加生动和...
8. **Testing and Optimization**:在多种分辨率和硬件配置的设备上进行测试,优化性能,保证在各种条件下都能流畅运行,是TV应用开发的最后一步。 通过对"AndroidTVLauncher.zip"的分析,我们可以看到,开发一个...
对于初学者来说,深入理解Android TV Launcher的源码是学习Android TV应用开发的重要一步。下面我们将详细探讨这个Demo的主要组件、工作原理以及如何通过源码学习关键概念。 1. **项目结构** AndroidTVLauncher-...
在Android TV应用开发中,`RecyclerView`和焦点框架的运用是至关重要的,因为它们直接影响到用户的交互体验。本文将深入探讨如何在Android TV上利用`RecyclerView`和焦点框架实现高效且美观的焦点移动效果,以及如何...
ANDROID 应用开发试题.pdf 这份试题涵盖了 Android 应用开发的多个方面,包括 Android 操作系统、虚拟机、Activity、组件、Intent、生命周期、资源管理等。下面对每个问题进行解释: 1. 下列不是手机操作系统的是...
综上所述,“CustomTvRecyclerView-master”项目是一个深入研究Android TV应用开发,特别是针对RecyclerView自定义和优化的实例。它展示了如何在保持性能的同时,提供丰富且适应电视交互方式的用户体验。通过学习和...
总之,在Android TV开发中,利用PopupWindow结合KeyListener,我们可以创建出符合电视用户习惯的交互界面,提升用户体验。记住,关键在于正确处理遥控器的按键事件,并确保PopupWindow的焦点和可触摸性设置正确。
androidTV RecyclerView 遥控器长按焦点丢失。自定义横向布局管理器来控制焦点的移动速度。
在Android TV开发中,"焦点自动换行"是一个重要的功能,它涉及到用户界面(UI)的交互性和可访问性。在Android TV系统上,用户通常通过遥控器进行操作,焦点管理是用户导航应用界面的关键。当用户按下遥控器的箭头键时...
在Android开发中,TV端应用的设计与手机应用有所不同,特别是在用户交互方面。此资源包"Android高级应用源码-TV端...通过学习和实践,开发者可以提升自己的Android TV应用开发技能,为用户提供更加友好的TV界面。