多分辨率支持
在设计之初,Android
系统
就被设计为一个可以在多种不同分辨率的设备上运行的操作系统。对于应用程序来说,系统平台向它们提供的是一个稳定的,跨平台的运行环境,而关于如何将程序以正确的方式显示到它所运行的平台上所需要的大部分技术细节,都由系统本身进行了处理,无需程序的干预。当然,系统本身也为程序提供了一系列API,所以在目标平台的分辨率是可以完全确定的情况下,程序也可以精确的控制自身在目标平台上的界面
显示方式。
这个文档会说明系统平台究竟提供了哪些分辨率支持特性,与它们如何在程序中使用的信息。如果你遵循文档中列出的方法,就很容易让你的程序在所有支持的分辨率下都能完美显示。这样你就可以用一个单独的.apk文件
,将你的程序发布到所有的平台上。
如果你已经发布过针对Android
1.5或更早版本平台的程序,你应该仔细阅读这篇文档,然后考虑一下到底如何让自己的老程序可以在拥有各种不同分辨率,并且运行着Android
1.6或更新平台上正常显示。在绝大部分情况下,只需要对程序作出小小的修改就可以达到目的,但你仍然需要尽可能地在各种分辨率的平台上进行测试。
特别的,如果你有一个已经完成的程序,又想让它可以在超低分辨率的设备(比如320×240)上正确运行,你需要阅读“老程序的更新策略”,那篇文档会告诉你应该怎么做。
术语和概念
屏幕
尺寸
屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如
2.8寸,
3.5寸)。
简而言之,
Android把所有的屏幕尺寸简化为三大类:大,正常,和小。
程序可以针对这三种尺寸的屏幕提供三种不同的布局方案,然后系统会负责把你的布局方案以合适的方式渲染到对应的屏幕上,这个过程是不需要程序员用代码来干预的。
屏幕长宽比
屏幕的物理长度与物理宽度的比例。程序可以为制定长宽比的屏幕提供制定的素材,只需要用系统提供的资源分类符
long和
notlong。
分辨率
屏幕上拥有的像素的总数。注意,虽然大部分情况下分辨率都被表示为“宽度×长度”,但分辨率并不意味着屏幕长宽比。在
Android系统中,程序一般并不直接处理分辨率。
密度
以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。
密度较低的屏幕,在长和宽方向都只有比较少的像素,而高密度的屏幕通常则会有很多——甚至会非常非常多——像素排列在同一区域。屏幕的密度是非常重要的,举个例子,长宽以像素为单位定义的界面元素(比如一个按钮),在低密度的屏幕上会显得很大,但在高密度的屏幕上则会显得很小。
密度无关的像素(
DIP
)
指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。
一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为
160DPI的屏幕上的像素是一致的,这也是
Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,“透明地”处理所有需要的
DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式:
pixels = dips * (density /
160)。举个例子,在
DPI为
240的屏幕上,
1个
DIP等于
1.5个物理像素。我们强烈推荐
你用
DIP来定义你程序的界面布局,因为这样可以保证你的
UI在各种分辨率的屏幕上都可以正常显示。
支持的屏幕分辨率范围
1.5及更早版本的
Android系统,在设计的时候假定系统只会运行在一种分辨率的设备上——
HVGA(
320×
480)分辨率,尺寸为
3.2寸。由于系统只能工作在一种屏幕上,开发人员就可以针对那个屏幕来编写自己的程序,而无需去考虑程序在其他屏幕上的显示问题。
但自从
Android 1.6以来,系统引入了对多种尺寸、多种分辨率屏幕的支持,以此满足拥有各种配置的新平台的运行需求。这就意味着开发人员在针对
Android
1.6或更新版系统开发程序的时候,需要为自己的程序在多种分辨率的屏幕上良好显示作出额外的设计。
为了简化程序员面在对各种分辨率时的困扰,也为了具备各种分辨率的平台都可以直接运行这些程序,
Android平台将所有的屏幕以密度和分辨率为分类方式,各自分成了三类:
·三种主要的尺寸:大,正常,小;
·三种不同的密度:高(
hdpi),中(
mdpi)和低(
ldpi)。
如果需要的话,程序可以为各种尺寸的屏幕提供不同的资源(主要是布局),也可以为各种密度的屏幕提供不同的资源(主要是位图)。除此以外,程序不需要针对屏幕的尺寸或者密度作出任何额外的处理。在执行的时候,平台会根据屏幕本身的尺寸与密度特性,自动载入对应的资源,并把它们从逻辑像素(
DIP,用于定义界面布局)转换成屏幕上的物理像素。
下表列出了
Android平台支持的屏幕中一些比较常用的型号,并显示了系统是如何把它们分类到不同的屏幕配置里的。有些屏幕分辨率并不在下面的列表上,但系统仍会把它们归入下列的某一个类型中。
|
低密度(
120),
ldpi
|
中密度(
160),
mdpi
|
高密度(
240),
hdpi
|
小
屏幕
|
·
QVGA(
240×
320),
2.6~
3.0寸
|
|
|
普通
屏幕
|
·
WQVGA(
240×
400),
3.2~
3.5寸
·
FWQVGA(
240×
432),
3.5~
3.8寸
|
·
HVGA(
320×
480),
3.0~
3.5寸
|
·
WVGA(
480×
800),
3.3~
4.0寸
·
FWVGA(
480×
854),
3.5~
4.0寸
|
大
屏幕
|
|
·
WVGA(
480×
800),
4.8~
5.5寸
·
FWVGA(
480×
854),
5.0~
5.8寸
|
|
如上表所示,所有分辨率的屏幕,都围绕在基准屏幕
周围,而基准屏幕在分类中,为“正常”尺寸,与“中”密度。之所以用
HVGA屏幕作为基准屏幕,是因为所有针对
Android 1.5或更早的程序都是针对这片屏幕所写的(因为只支持这一片),比如
T-Mobile G1。
虽然系统支持上面
9种不同配置的屏幕,但你并不一定需要为它们都提供各自不同的资源。系统已经提供了足够鲁棒(就是在各种恶劣环境下正常工作,对环境变化不敏感)的兼容特性,用于在各种不同的屏幕上良好显示你的程序。这在下面的文档中会详细描述,如果你需要更多的资料,请查看“与屏幕无关的最佳实践”。
分享到:
相关推荐
Android多分辨率支持
白名单的分辨率数据要和kernel中的hdmi驱动新增分辨率一致
探究Android的多分辨率支持以及各种类型图标尺寸大小
编码UTF-8;我们在ZOL上可以通过“参数”查看知名设备的信息,但如果客户寄给你一个他们自己定制的平板,通过“设置”也看不到你想要的信息, ...此Demo提供了获取设备的分辨率、屏幕尺寸和屏幕像素密度(PPL)的方式。
本人业余开发的一款基于android平台的录音机,由于图片资源分辨率的原因,在480*320分辨率或更低分辨率的机器上可以正常显示布局
Andoird设备相机拍摄指定分辨率照片demo,支持分辨率选择列表,直接设置相机硬件参数,无需压缩。
Android 屏幕自适应方向尺寸与分辨率,包括屏幕界面布局、多分辨率支持、获取屏幕尺寸、屏幕横屏与竖屏等,android 模拟器横屏,android 虚拟机横屏,android 判断横屏,android 禁止横屏,android 强制横屏,...
电信设备-一种Android移动终端支持不同分辨率的方法.zip
支持任何分辨率的视频编码。无需关心相机分辨率。 支持为现有视频添加过滤器或剪切视频。 支持 RTMP 流。 支持在不重新启动相机的情况下更改分辨率。 支持硬编码和软编码。 录制视频和音频。通过 MediaMuxer 打包 ...
Android安卓自定义RatingBar控件(解决了多分辨率问题,以及被截取或者有阴影的问题) 自定义了两个控件,一个大,一个小。因为有的设置没有办法在代码里面设置,所以自定义控件是继承于LinearLayout。 大家直接把...
uni-app在Android平台上录制视频,支持设置分辨率和视频名称,有取消、重录和完成功能 视频录制 视频设置分辨率 Android录制视频 资源包中有demo源码和相关操作文档
Basic4android语言类似于Visual Basic语言,支持更多的对象。Basic4android将代码编译成Android原生(native)应用,无需其它运行环境的支持。与其它的集成开发环境不同,Basic4android是完全用于Android应用开发的...
1)支持Android 2.2(含)以上系统 2)支持RDP协议 3)支持Windows2008 RemoteApp,实现应用交付功能 4)支持远程桌面自定义分辨率,并能自适应手机屏幕全屏显示 5)支持放大、缩小等基本手势操作 6)支持屏幕旋转 7...
支持根据分辨率自动缩放显示,支持原始大小显示及四分之一大小显示等四种缩放模式,支持屏幕自动旋转。 支持实时保存Android桌面到BMP文件、PNG文件和系统剪贴板(Clipboard)。 支持局域网内的自动侦测与连接,无需...
HardwareHardwareVideoCodec将不会更新此...该项目使用c / c ++实现,目前仅支持Android平台,但也可以轻松移植到其他平台,例如IOS。 HWVC(HardwareVideoCodec)HWVC是适用于Android的高效视频编码库。 支持软件和硬
通过使用androidusbcamera,您可以简单地检测并连接到usb摄像头,还可以使用它来实现拍照、记录mp4、切换分辨率、获取h.264/aac/yuv(nv21)流和设置摄像头的对比度或亮度,支持480p、720p、1080p及更高版本等。
鉴于某个垃圾博主只搬运两个小功能,竟然收30分,实在忍无可忍这种垃圾。app需要系统签名才可以获取信息,普通权限app只能部分信息。
Surfaceview 自定义相机,支持分辨率修改,开关闪光灯,选择前后摄像头,拍摄完成存为图片;
支持 Android Camera 画面捕获,并进行 H.264 编码,以及支持 Android 麦克风音频采样并进行 AAC 编码;还实现了一套可供开发者选择的编码参数集合,以便灵活调节相应的分辨率和码率;同时,SDK 提供数据源回调接口...