android支持多种屏幕

术语和概念

屏幕尺寸
实际的物理尺寸,测量屏幕的对角线。

为简单起见,Android的组中的所有实际的屏幕尺寸分为四个广义大小:小,正常,大,超大。

屏幕像素密度
屏幕的物理区域内的像素的数量,通常简称为dpi(每英寸点数)。例如,一个“低”密度屏幕具有给定的物理区域内较少的像素相比,“正常”或“高”密度画面。

为简单起见,Android的组中的所有实际的屏幕密度分为四个广义密度:低,中,高和超高。

方向
屏幕但从用户的角度方向。这是横向或纵向的,这意味着屏幕的宽高比可以是宽或高,分别为。要知道,不仅做不同的设备在默认情况下在不同的方向运行,但方向可以在运行时,当用户旋转设备改变。
决议
在屏幕上的物理像素的总数。当添加多屏幕支持,应用程序不直接与解析工作;应用程序应该只关注屏幕的大小和密度,所指定的广义的大小和密度群体。
密度无关的像素(DP)
您应该使用定义UI布局时,以表达布局的尺寸或位置的密度无关的方式虚拟像素单元。

密度无关的像素相当于一个160 dpi的屏幕上的一个物理像素,这是基线密度由系统假定为“中等”密度画面。在运行时,系统透明地处理的DP单位,必要时,根据所使用的屏幕的实际密度任何缩放。的DP单位转换为屏幕像素很简单: 像素= DP *(DPI / 160) 。例如,一个240 dpi的屏幕上,1个DP等于1.5物理像素。定义你的应用程序的UI时,您应该总是使用DP单位,以确保不同密度的屏幕UI的正确显示。

支持屏幕范围

采用Android 1.6(API级别4)开始,Android提供了多种屏幕尺寸和密度的支持,反映了许多不同的屏幕配置一个设备可能有。您可以使用Android系统的特性来优化你的应用程序的用户界面,每个屏幕配置,并确保您的应用程序不仅提供了正常,但提供最佳的用户体验可能每个屏幕上。

为了简化您在设计用户界面的多个屏幕的方式,Android的划分实际的屏幕大小和密度的范围为:

  • 一组四个广义的大小正常, XLARGE

    注:与Android 3.2(API级别13)开始,这些尺寸组废弃,在管理屏幕尺寸的基础上,可用屏幕宽度的一种新技术。如果你正在开发的Android 3.2和更高,看到声明的平板布局为Android 3.2的更多信息。

  • 一组四个广义密度LDPI(低),MDPI (中等), 华电国际(高),和xhdpi(特高)

广义的大小和密度都围绕着一个基准配置是一个正常的大小和MDPI(中)密度。这个基线是根据屏幕配置第一个Android设备,在T-Mobile的G1,其中有一个HVGA屏幕(直到Android的1.6,这是Android的唯一支持的屏幕配置)。

每一个广义的大小和密度范围极为广泛的实际屏幕尺寸和密度。例如,两个装置,这两个报告的画面尺寸通常可能具有实际的屏幕尺寸和当手工测量的是稍有不同的纵横比。类似地,两个设备报告的画面密度HDPI可能具有实际的像素密度是略有不同的。安卓使得这些差异抽象的应用程序,这样你就可以提供用户界面设计的广义大小和密度,并让系统处理任何最终的调整是必要的。图1说明了不同的尺寸和密度大致分为不同的尺寸和密度基团。

图1: 插图Android的大致有实际的大小和密度映射到广义的大小和密度(数字不准确)。

当你设计你的UI为不同的屏幕尺寸,你会发现,每一个设计需要的空间最小量。因此,每个广义屏尺寸上面都有一个可以由系统定义的相关的最小分辨率。这些最小尺寸的“DP”的单位,同样定义你的布局,使系统避免担心改变屏幕密度时,你应该使用单位。

  • XLARGE屏幕是至少960dp x 720dp
  • 屏幕是至少640dp x 480dp
  • 正常屏幕是至少470dp x 320dp
  • 屏幕是至少426dp x 320dp

注:这些最低屏幕尺寸是没有得到很好的界定到Android 3.0之前,所以你可能会遇到被错误归类正常和大之间的一些设备。这些也是基于屏幕的物理分辨率,因此可能会有所不同跨设备,例如1024x720平板电脑的系统栏实际上有可用于应用程序,由于它正在使用的系统栏位空间较小。

要优化你的应用程序的用户界面不同的屏幕大小和密度,可以提供 替代资源的任何广义的大小和密度。通常情况下,你应该对一些不同的屏幕尺寸和不同的屏幕密度替代位图图像提供替代布局。在运行时,系统将使用相应的资源为你的应用程序,基于当前设备屏幕的广义大小或密度。

你不需要对屏幕尺寸和密度的每一组合提供替代的资源。该系统提供了强大的兼容特性,可以处理大部分渲染你的应用程序的任何设备屏幕上的工作,前提是你已经使用的技术,允许它优雅地调整(如所描述的实施你的用户界面的最佳实践,下同)。

注意:用于定义设备的广义的屏幕尺寸和密度的特征是相互独立的。例如,WVGA的高密度屏被认为是一个正常大小的屏幕,因为它的物理尺寸大约是相同的T - Mobile G1(Android的第一个设备和基线屏幕配置)。在另一方面,一个WVGA中等密度的屏幕被认为是一个大尺寸的屏幕。虽然它提供了相同的分辨率(像素数相同),在WVGA中等密度的屏幕具有较低的屏幕像素密度,这意味着每个像素是身体较大,因此,整个屏幕比基线(正常大小)屏幕大。

密度独立性

您的应用程序达到“密度独立”时,它保留了用户界面元素的物理尺寸(但从用户的角度)时,对不同密度的屏幕上显示。

密度保持独立性很重要,因为如果没有它,一个UI元素(如按钮)出现低密度屏幕尺寸更大和更小的高密度屏幕上。这样的密度相关的大小的变化可能会导致您的应用程序的布局和可用性问题。图2和图3示出了应用程序之间的差异,当它不提供密度独立性和当它,分别。

图2实施例的应用程序无需为不同密度的支撑,如图所示的低,中和高密度的屏幕。

图3为不同密度的良好支持示例应用程序(它的密度无关),如图所示在低,中,高密度的屏幕。

Android系统可以帮助您的应用程序实现密度的独立性有两种方式:

  • 该系统扩展DP单位为适合当前屏幕密度
  • 系统扩展拉伸资源到适当的大小,是根据当前屏幕密度,如果有必要

在图2中,文本视图和位图绘制在像素(指定尺寸像素 为单位),所以意见是低密度屏幕尺寸更大和更小的高密度屏幕上。这是因为,尽管实际的屏幕尺寸可以是相同的,高密度的屏幕上每英寸有更多的像素(在更小的区域中的像素的相同量的适应)。在图3中,布局尺寸以密度无关的像素(指定小数单位)。因为基线密度无关的像素是一种中等密度的屏幕,该装置具有一个中等密度的屏幕看起来相同的,因为它在图2中。对于低密度和高密度的屏幕,然而,该系统的扩展与密度无关的像素值的下和上,分 ​​别以适应屏幕的适当。

在大多数情况下,可以保证密度的独立性在你的应用程序只需通过指定密度无关的像素(所有的布局尺寸值DP单位)或“wrap_content” (如适用)。然后,系统扩展位图可绘适当,以显示在相应的尺寸,基于当前屏幕的密度适当的缩放因子。

然而,位图缩放可能会导致模糊或像素化的位图,你可能会在上面截图通知。为了避免这些文物,应为不同密度提供可供选择的位图资源。例如,你应该为高密度的屏幕提供了更高分辨率的位图,系统会使用,而不是调整大小专为中等密度的屏幕位图的。下面一节介绍更多有关如何提供替代资源为不同的屏幕配置。

如何支持多画面


Android的多屏幕支持的基础是它能够管理应用程序的布局和位可绘制对象的渲染以适当的方式对当前屏幕配置的能力。该系统处理的大部分工作由布局缩放以适合屏幕尺寸/密度和缩放位图可绘制在屏幕密度正确呈现您的应用程序在每个屏幕的配置(如适用)。为了更妥善地处理不同的屏幕配置,但是,你也应该:

  • 显式声明在屏幕尺寸应用程序支持的清单

    通过声明它的屏幕尺寸应用程序支持,可以确保与您所支持的屏幕只有设备可以下载你的应用程序。针对不同的屏幕尺寸,宣布支持也可能会影响系统如何吸引你的应用程序在更大屏幕上,具体而言,您的应用程序是否在运行屏幕兼容模式

    申报屏幕尺寸的应用程序支持,则应该包括 <supports-screens>在你的manifest文件的元素。

  • 提供不同的布局,不同的屏幕大小

    默认情况下,Android的重新调整你的应用程序的布局,以适应当前设备屏幕。在大多数情况下,这工作得很好。在其他情况下,你的用户界面可能不看的好,可能需要不同的屏幕大小调整。例如,在更大的屏幕上,你可能需要调整一些元素的位置和大小来采取额外的屏幕空间的优势,或者在一个较小的屏幕上,你可能需要调整大小,这样一切都可以适合在屏幕上。

    配置预选赛你可以用它来 ​​提供粒度特定资源 正常XLARGE例如,布局超大屏幕应该在布局XLARGE /

    采用Android 3.2(API级别13)起,上述尺寸组弃用,您应该改用SW N个DP配置限定符来定义您的布局资源所需的最小可用宽度。例如,如果您的多窗格平板电脑布局至少需要600dp屏幕宽度的,你应该把它放在布局sw600dp /。使用新技术来声明资源布局在有关章节中进一步讨论宣告平板布局为Android 3.2

  • 为不同的屏幕密度不同的位图可绘

    默认情况下,Android的扩展你的可绘制对象的位图(。PNGJPG格式,和。GIF文件)和九补丁可绘(0.9。PNG文件),使它们呈现在每个设备上相应的物理尺寸。例如,如果您的应用程序只为基线提供位图可绘,中密度屏幕(MDPI),那么系统扩展起来的高密度屏幕上时,和缩放下来低密度屏幕上时。这个比例可以引起位图的文物。为确保您的位图看起来是最好的,你应该包括替代版本在不同的屏幕密度不同的分辨率。

    配置合格者可用于密度的特定资源 LDPI(低),MDPI(中等),华电国际(高),和 xhdpi(特高)。例如,位图高密度的屏幕应该在 绘制-HDPI /

的大小和密度配置的限定对应于所述的广义的尺寸和密度范围支持屏幕,上面。

注意:如果你不熟悉配置预选赛和系统如何使用他们申请替代资源,阅读提供了替代的资源获取更多信息。

在运行时,该系统确保以下过程对于任何给定的资源在当前屏幕上的最佳显示:

  1. 该系统采用相应的替代资源

    基于当前屏幕的大小和密度,系统使用的任何应用程序中提供的大小和密度的特定的资源。例如,如果该设备具有高密度的屏幕和应用程序请求一个可拉伸的资源,则系统会寻找该设备配置最匹配的可绘制资源目录。根据可用其他替代资源,具有资源目录华电国际限定符(如 绘制-HDPI /)可能是最好的比赛,因此本系统采用从这个目录中可绘制资源。

  2. 如果没有匹配的资源可用,系统将使用默认的资源和需要相匹配当前屏幕的大小和密度扩展其向上或向下

    “默认”资源是指那些没有被标注为配置限定符。例如,在资源可拉伸/是默认的拉伸资源。系统假定默认资源被设计为基线的屏幕大小和密度,这是一个正常的屏幕大小和介质的密度。因此,该系统默认缩放密度资源最多为高密度屏幕和向下低密度屏幕,适当的。

    但是,当系统寻找与密度相关的资源,不找到它的密度特定的目录,它不会总是使用默认的资源。该系统也可以改用其他密度特定的资源之一,为了缩放时提供更好的结果。举例来说,寻找一个低密度的资源,这是不可用时,系统先缩减本资源的高密度版本,因为该系统可以通过轻松扩展的高密度资源下降到低密度一个因数为0.5,用较少的工件,相对于由0.75的因子缩放的中等密度的资源。

有关如何通过Android的配置相匹配预选赛到设备配置选择替代资源的更多信息,请参阅 如何Android的找到最佳匹配的资源

使用配置预选赛

Android支持多种配置合格者,允许您控制系统如何选择你的基础上,当前设备屏幕的特性替代资源。一个配置限定符是可以附加到一个资源目录在你的Andr​​oid项目的字符串,并指定该资源的内部设计配置。

使用配置预选赛:

  1. 在项目中创建的新目录的res /目录,并使用以下格式命名:<resources_name> - <qualifier>
    • <resources_name>是标准的资源名称(如绘制或 布局)。
    • <qualifier>是从表1中,下面的配置限定符,指定屏幕配置这些资源将被使用(例如HDPIXLARGE)。

    你可以使用一个以上的<qualifier>在同一时间,只是分隔每个限定词破折号。

  2. 保存相应的配置特定的资源在这个新的目录。资源文件必须命名为完全一样,默认的资源文件。

例如,XLARGE是一个配置预选赛超大屏幕。当你追加这个字符串到资源目录名(如布局XLARGE),它指示系统,这些资源将在具有一个额外的大屏幕设备中使用。

表1。配置合格者,可让您针对不同的屏幕配置提供特殊资源。

屏幕特性 预选赛 描述
大小 资源尺寸的屏幕。
正常 资源为正常尺寸的屏幕。(这是基线的大小。)
资源为尺寸屏幕。
XLARGE 资源,超大尺寸的屏幕。
密度 LDPI 低密度(资源LDPI)屏幕(〜120DPI)。
MDPI 用于中密度(资源MDPI)屏幕(〜160dpi的)。(这是基线密度。)
华电国际 对于高密度(资源华电国际)屏幕(〜240DPI)。
xhdpi 额外的高密度(资源xhdpi)屏幕(〜320dpi)。
nodpi 资源的所有密度。这些是与密度无关的资源。该系统不能扩展标记用此修饰符的资源,无论当前屏幕的密度。
tvdpi 资源屏幕MDPI和HDPI介于两者之间;约213dpi。这不被视为一个“主”密度组。它主要用于电视和大多数应用程序并不需要它,提供MDPI和HDPI资源足以满足大多数的应用程序,系统将扩展他们为合适。如果您认为有必要提供tvdpi资源,你应该调整它们的大小为1.33 * MDPI的一个因素。例如,一个100像素x 100像素的图像为MDPI屏幕应该是133px x 133px的tvdpi。
方向 土地 资源在横向(宽屏)屏幕。
端口 资源在纵向(高宽比)屏幕。
长宽比 资源有较基线屏幕配置一个显著高或更大的宽高比(以纵向或横向时,分别)屏幕。
notlong 资源具有的纵横比,它类似于基线屏幕配置使用的屏幕。

注意:如果您开发的应用程序为Android 3.2和更高版本,请参阅有关节宣告平板布局为Android 3.2关于新的配置信息预选赛宣告,而不是使用大小预选赛时,布局资源为特定的屏幕大小(你应该使用在表1)。

有关如何将这些限定词大致对应于实际的屏幕尺寸和密度的详细信息,请参阅屏幕支持的范围,本文前面。

例如,下面是资源的目录中,提供了不同的布局设计为不同的屏幕尺寸和不同的位图可绘为中,高和超高密度的屏幕的应用程序的列表。

RES / 布局/ my_layout XML              / /布局正常屏幕尺寸(“默认”)
RES / 布局- / my_layout XML        / /布局小屏幕尺寸
RES / 布局- / my_layout XML        / /布局大屏大小
RES / 布局- XLARGE / my_layout XML       / /布局超大屏幕大小
水库/ 布局- XLARGE - 土地/ my_layout XML / /布局超大横向

RES / 绘制- MDPI / my_icon PNG         / /位图对于中等密度
水库/ 绘制- 华电国际/ my_icon PNG         / /位图进行高密度
RES / 绘制- xhdpi / my_icon PNG        / /位图进行额外的高密度

有关如何使用替代资源和配置限定符(不只是屏幕配置)的完整列表的详细信息,请参阅 提供了替代资源

请注意,当Android系统挑选哪些资源在运行时使用,它采用一定的逻辑来测定中的“最佳匹配”的资源。也就是说,您可以使用限定符不具有对当前屏幕配置完全匹配在所有情况下,为了使系统使用它们。具体来说,在选择的基础上,大小预选赛资源时,系统将使用专为屏幕比当前屏幕较小的资源,如果没有更好的匹配(例如,大尺寸屏幕将使用正常大小的屏幕资源,如果资源必要的话)。但是,如果只提供资源较大比当前画面时,系统将不使用他们,你的应用程序会崩溃,如果没有其他的资源相匹配的设备配置(例如,如果所有布局资源的标签与XLARGE预选赛,但设备是一个正常大小的屏幕)。有关系统如何选择资源的更多信息,请参阅如何Android的找到最佳匹配的资源

提示:如果你有一些可绘制资源,系统不应该扩展(也许是因为你执行一些调整,在运行时的图像自己),你应该把它们放在一个目录下的nodpi配置限定符。用此修饰符的资源被认为是密度无关,系统将无法扩展它们。

另类设计布局和可绘

可替代资源,你应该创建类型取决于应用程序的需求。通常情况下,你应该使用的大小和方向限定符来提供可选择的配置资源,并使用密度限定符来提供另一种位图绘制资源。

以下各节概述了如何你可能想使用的大小和密度的限定,以提供替代布局和可绘,分别。

另类布局

一般情况下,你就会知道你是否需要为不同的屏幕尺寸替代布局,一旦你测试你的应用程序在不同的屏幕配置。例如:

  • 当在小屏幕上进行测试时,你可能会发现,你的布局不很适合在屏幕上。例如,一排按钮可能无法在屏幕的一个小屏幕的设备上的宽度内适应。在这种情况下,你应该为小屏幕的替代布局调整按钮的大小或位置。
  • 当一个额外的大屏幕上进行测试时,你可能会意识到,你的布局并没有有效地利用大屏幕的,并且明显拉长,以填补它。在这种情况下,你应该提供超大屏幕的另一种布局,对正在为更大的屏幕,例如平板电脑优化的重新设计的UI。

    虽然你的应用程序应该可以正常工作没有替代布局上的大屏幕,这是对用户非常重要,你的应用程序看起来好像它是为他们的设备而设计的。如果UI明显拉长,用户更可能是不满意的应用程序体验。

  • 并且,在横向测试相比,纵向的时候,你可能会注意到,放置在屏幕的纵向底部的UI元素,反而是在右侧横向屏幕。

总之,你应该确保你的应用程序布局:

  • 适合在小屏幕上(这样用户就可以真正使用你的应用程序)
  • 是更大的屏幕采取额外的屏幕空间的优势优化
  • 是横向和纵向方向优化

如果你的UI使用的需要,以适应视图的大小,系统扩展的布局(如一个按钮的背景图片),即使位图,你应该使用九补丁的位图文件。九补丁文件基本上是在您特定的二维区域是可拉伸的PNG文件。当系统需要扩展,其中位图使用的视图,该系统绵延九补丁的位图,但只延伸在指定的区域。因此,你并不需要提供不同的可绘制不同的屏幕大小,因为九补丁点阵图可以调整到任何大小。你应该,但是,提供你的九补丁文件的不同的屏幕密度的替代版本。

另一种可绘

图4。相对尺寸为支持各密度的位图可绘。

几乎每一个应用程序应该有另类的可绘制资源,不同的屏幕密度,因为几乎每一个应用程序都有一个启动图标,该图标就应该很好看的所有的屏幕密度。同样,如果您在您的应用程序中其他的位图可绘(如菜单图标或应用程序中的其他图形),你应该提供替代的版本或每个人,具有不同的密度。

注:您只需要提供位图文件的密度相关的可绘制对象(PNG。 JPG,GIF。 )及玖路径文件(0.9 PNG。 )。如果您使用XML文件来定义形状,颜色,或其他可绘制资源,你应该把一个副本在默认目录下绘制(绘制/)。

若要建立不同密度的替代位图可画,你应该遵循 3:4:6:8的比例缩放的四个广义密度之间。例如,如果你有一个位图绘制这是48×48像素的中密度屏幕(用于启动器图标的大小),所有不同尺寸应该是:

  • 36X36低密度
  • 48×48为中等密度
  • 72x72时为高密度
  • 96X96额外的高密度

有关设计图标的详细信息,请参阅图标设计指南,其中包括大小信息的各种位图可绘,如发射器的图标,菜单图标,状态栏图标,选项卡上的图标,以及更多。

声明平板布​​局为Android 3.2


对于第一代运行Android 3.0平板电脑,正确的方式来宣告平板电脑的布局是把它们放在一个目录下的XLARGE配置限定符(例如, RES /布局XLARGE /)。为了适应其他类型的平板电脑和屏幕尺寸,特别是,7“平板电脑- Android的3.2引入了一种新的方式来指定资源的多个离散的屏幕尺寸。这项新技术是基于空间布局需要的金额(如600dp宽度),而不是试图让你的布局符合广义大小团体(如XLARGE)。

之所以设计为7“平板电脑是棘手的,当使用广义的大小团体是一个7”平板电脑在技术上处于同一组的5“子机(组),而这两种设备都看似接近对方的大小,对应用程序的UI空间量显著不同,由于是用户交互的风格,因此,一个7“和10”屏幕不应该总是使用相同的布局。为了使您能够为这些提供不同的布局两种屏幕,安卓现在允许您根据宽度和/或高度实际上可用于您的应用程序的布局,在DP为单位指定,指定你的布局资源。

例如,你设计你想要使用平板式器件的布局之后,您可能确定的布局停止运作良好的时候,屏幕小于600dp宽。此阈值从而成为您需要为您的平板电脑布局的最小尺寸。因此,您现在可以指定这些资源的布局应该使用,只有当至少有可用于您的应用程序的UI 600dp宽度。

您应该选择一个宽度和设计,以它作为你的最小尺寸,或考什么是最小宽度的布局支持,一旦它的完成。

注意:请记住,所有这些新的API规格所用数字的密度indpendent像素(DP)值和布局方面也应该始终使用DP单位定义的,因为你在乎什么是可用的系统后的屏幕空间量占屏密度(相对于使用原始像素分辨率)。如需密度indpendent像素的更多信息,请阅读条款和概念,本文前面。

使用新的大小预选赛

不同的资源配置,您可以根据可用的布局空间列于表2。这些新的限定符为您提供更多的控制权的具体屏幕尺寸的应用程序支持,相比传统屏幕尺寸组(小,正常,大,XLARGE)。

注意:您指定使用这些限定词的大小是 不实际的屏幕尺寸。相反,大小为DP单位,宽度或高度提供给您的活动的窗口。Android系统可能会使用一些屏幕的系统UI(如屏幕或在顶部状态栏的底部系统栏),所以有些画面可能不适用于你的布局。因此,你声明的大小应该是明确有关声明多大的空间,它为你的布局时,需要通过你的活动,在系统帐户所使用的系统UI任何空间的大小。另外注意的是在操作栏被认为是应用程序的窗口空间的一部分,虽然你的布局不声明它,所以它减少了可用于你的布局空间,你必须在你的设计考虑它。

表2。新配置qualifers的屏幕大小(以安卓3.2中引入)。

屏幕配置 限定词值 描述
smallestWidth SW <N> DP

例子:sw600dpsw720dp


屏幕的基本尺寸,通过可用的屏幕区域的最短尺寸表示。具体来说,该设备的smallestWidth是最短的屏幕的可用高度和宽度(你也可以把它当做了“最小宽度”的屏幕)。你可以使用这个限定词,以确保,无论画面的电流方向,你的应用程序至少有N个宽度为它提供用户界面的dps。

例如,如果你的布局要求,其最小的屏幕面积的尺寸至少有600 DP在任何时候,那么你可以使用这个限定符来创建布局资源,res/layout-sw600dp /。该系统将使用这些资源仅当可用屏幕的最小尺寸至少为600dp,无论600dp侧是否是用户感知的高度或宽度。该smallestWidth是设备的固定屏幕尺寸特性; 当屏幕的方向改变了设备的smallestWidth不会改变

设备的smallestWidth考虑到屏幕的装饰品和系统UI。例如,如果该设备具有解释沿smallestWidth的轴线空间在屏幕上的一些持久性的用户界面元素,该系统宣告smallestWidth为比实际屏幕尺寸较小,因为这些是可提供的UI画面的像素。

这是一个替代广义屏尺寸限定符(小,正常,大,XLARGE),它允许你定义一个离散对数的有效尺寸可用于您的UI。因为宽度往往是在设计布局的驱动因素使用smallestWidth确定,一般屏幕尺寸是非常有用的。一个UI往往会垂直滚动,但有相当硬约束,它需要横向的最小空间。可用宽度也是决定是否使用一个单窗格布局手机或平板电脑多面板布局的关键因素。因此,您可能最关心的最小可能宽度将每个设备上的东西。

可用屏幕宽度 瓦特<N> DP

例子:w720dpw1024dp


指定DP单元的最小宽度可在该资源应该被用来定义由N个值。当横向和纵向之间切换屏幕的方向切换,以反映当前的实际宽度是可用于您的用户界面的宽度系统的相应值的变化。

这是非常有用的确定是否使用了多面板布局,因为即使是在平板设备,你经常会不想为纵向相同的多面板布局为你做的景观。因此,你可以用它来指定,而不是使用两个屏幕的大小和方向预选赛在一起所需布局的最小宽度。

可用屏幕高度 ħ<N> DP

例子:h720dph1024dp等。 


指定在DP单位最小屏幕高度在哪个资源应该用于定义由N个值。当横向和纵向之间切换屏幕的方向切换,以反映当前的实际高度是可用于您的用户界面的高度系统的相应值的变化。

在相同的方式使用这种方法来定义由布局所需要的高度是有用瓦特<N> DP是用于定义所要求的宽度,而不是使用两个屏幕的大小和方向的限定。然而,大多数应用程序不需要这个限定词,考虑到用户界面往往垂直滚动,因而更灵活,有多少高度可用,而宽度比较死板。

虽然使用这些限定词似乎不是用屏幕尺寸组更复杂,它实际上应该是,一旦你确定你的用户界面的要求简单。当你设计你的UI,你可能关心的主要问题是在您的应用程序手机风格的用户界面,并使用多个窗格平板式用户界面之间切换的实际大小。此开关的确切点,将取决于您的特定设计,也许你需要一个720dp宽度为平板电脑设计,也许600dp就够了,或者480dp,或它们之间的一些数字。在表2中使用这些限定词,你是在精确的大小时,你的布局改变的控制权。

有关这些大小配置预选赛的更多讨论,请参阅 提供了资源文件。

配置实例

为了帮助您针对您的一些设计适用于不同类型的设备,这里有一些数字为典型的屏幕宽度:

  • 320dp:一个典型的手机屏幕(240X320 LDPI,320x480的MDPI,480x800的华电国际等)。
  • 480dp:一个中间人的平板状的条纹(480×800 MDPI)。
  • 600dp:7“平板电脑(600x1024 MDPI)。
  • 720dp:10“平板电脑(720x1280 MDPI,800x1280 MDPI等)。

使用从表2的大小预选赛,您的应用程序可以在您不同的布局之间的资源使用你想要的宽度和/或高度任意数量的手机和平板电脑进行切换。例如,如果600dp是平板电脑布局支持的最小可用宽度,可以提供这两套布局:

RES / 布局/ main_activity XML            #对于手机
RES / 布局- sw600dp / main_activity XML    #对于平板电脑

在这种情况下,可用的屏幕空间的最小宽度必须600dp,为了使片剂的布局被应用。

对于要进一步定制您的UI尺寸,如7“和10”平板电脑区分其他情况下,您可以定义额外的最小宽度的布局:

RES / 布局/ main_activity XML            #对于手机(小于600dp可用宽度)
RES / 布局- sw600dp / main_activity XML    #对于7“平板电脑(600dp宽更大)
RES / 布局- sw720dp / main_activity XML    #对于10“平板电脑(720dp宽更大)

请注意,前面的两套例如资源的使用“最小宽度”限定符,SW <N> DP,它指定了最小屏幕的两侧,无论该器件的电流方向。因此,使用SW <N> DP是通过忽略屏幕的方向来指定整个屏幕尺寸可供布局的简单方法。

然而,在某些情况下,可能是什么对于你的布局重要的是究竟有多大的宽度或高度是当前可用的。例如,如果你有两个窗格布局与两个片段并排,你可能想使用它时,屏幕上提供至少600dp宽度,该设备是否在横向或纵向。在这种情况下,你的资源可能看起来像这样:

RES / 布局/ main_activity XML          #对于手机(小于600dp可用宽度)
RES / 布局- w600dp / main_activity XML   #多面板(带600dp可用宽度以上任一屏幕)

请注意,第二组使用的是“可用宽度”限定词,瓦特<N> DP。这样,一个设备可以将实际使用两种布局,这取决于屏幕的方向(如果可用的宽度至少为600dp在一个方向并小于600dp在其它方位)。

如果可用的高度是给你的一个问题,那么你可以使用做同样的ħ<N> DP预选赛。或者,即使结合瓦特<N> DPħ<N> DP 预选赛,如果你需要真正具体。

声明屏幕尺寸的支持

一旦你实现你的布局,不同的屏幕大小,重要的是你在你的manifest文件,都会挑选您的应用程序支持的声明同样重要。

随着新的配置预选赛的屏幕尺寸,安卓3.2引入了新属性的<supports-screens> manifest元素:

机器人:requiresSmallestWidthDp
指定所需的最低smallestWidth。该smallestWidth是屏幕的空间(在最短尺寸DP单位),必须提供给你的应用程序的用户界面,也就是最短的可用屏幕的两个维度。因此,为了使被认为是与应用程序相兼容的设备,该设备的smallestWidth必须等于或大于该值。(通常情况下,您为这个值是“最小宽度”,你的布局支持,无论画面的电流方向。)

例如,如果你的应用是仅适用于具有600dp最小的可用宽度的平板式设备:

<舱单... > 
    <支持屏 的android:requiresSmallestWidthDp = “600”  /> 
    ... 
</舱单>

但是,如果你的应用程序支持搭载Android(小如426dp x 320dp),那么你并不需要声明这个属性,支持所有的屏幕尺寸,因为最小的宽度你的应用程序需要的是最小的可能在任何设备上。

注意: Android系统并不注意这个属性,因此它不会影响您的应用程序的行为在运行时。相反,它是用来启用过滤为您的服务,如谷歌Play应用程序。然而, 谷歌播放目前不支持此属性过滤(在Android 3.2),所以你应该继续使用其他的大小属性,如果你的应用程序不支持小屏幕。

机器人:compatibleWidthLimitDp
此属性允许您启用屏幕兼容模式通过指定的最大“最小宽度”,你的应用程序支持为用户可选功能。如果一个设备的可用屏幕的最小边大于在这里你的价值,用户仍然可以安装应用程序,而是提供给屏幕兼容模式下运行它。默认情况下,屏幕兼容模式下被禁用,你的布局调整大小以适应屏幕像往常一样,但一个按钮可在系统栏,允许用户切换屏幕兼容模式打开和关闭。

注意:如果您的应用程序的布局适当调整大小的大屏幕,你不需要使用这个属性。我们建议您不要使用此属性,而是确保你的布局按照本文档中的建议,调整大小的大屏幕。

机器人:largestWidthLimitDp
这个属性允许你强制启用屏幕兼容模式通过指定的最大“最小宽度”,你的应用程序支持。如果一个设备的可用屏幕的最小边大于在这里你的价值,该应用程序在屏幕兼容模式运行,没有方法让用户可以禁用它。

注意:如果您的应用程序的布局适当调整大小的大屏幕,你不需要使用这个属性。我们建议您不要使用此属性,而是确保你的布局按照本文档中的建议,调整大小的大屏幕。

注意:当开发为Android 3.2及更高版本,您不应该使用在组合旧的屏幕尺寸属性与上面列出的属性。同时使用新属性和旧属性的大小可能会导致意外行为。

有关这些属性的更多信息,请按照以上相应链接。

最佳实践


支持多个屏幕的目的是创建一个能正常运作,并看好在任何搭载Android支持的广义屏配置的应用程序。本文件的前面几节提供了关于Android如何适应你的应用程序的屏幕配置,以及如何自定义应用程序的外观在不同的屏幕配置的信息。本节提供了一些额外的提示和技巧,以帮助确保您的应用程序为不同的屏幕配置正确缩放的概述。

这里是关于你如何确保你的应用程序在不同屏幕上显示正确快速的清单:

  1. 使用wrap_contentFILL_PARENT,或DP在XML布局文件中指定尺寸的单位时,
  2. 不要在你的应用程序代码中使用硬编码的像素值
  3. 不要使用AbsoluteLayout的(它是不建议使用)
  4. 针对不同的屏幕密度供应替代位图可绘

以下部分提供了更多的细节。

1。使用wrap_content,FILL_PARENT,或送稿器单元的布局尺寸

当定义的android:layout_width机器人:layout_height的意见在XML布局文件,使用“wrap_content”, “FILL_PARENT”DP单元保证了视图给予适当的大小当前设备屏幕上。

举例来说,一个视图layout_width =“100DP”措施100像素宽的中等密度的屏幕和系统扩展它高达150像素宽的高密度屏,让视图在屏幕上占据大约相同的物理空间。

同样,你应该更喜欢的SP(独立规模像素)来定义文本大小。该SP比例因子取决于用户设置和系统规模的大小,因为它确实为同一DP

2。不要在你的应用程序代码中使用硬编码的像素值

出于性能原因,并保持代码的简单,Android系统使用像素作为表达维度的标准单位或坐标值。这意味着,一个视图的尺寸是使用像素始终表示在代码中,但总是基于当前屏幕的密度。例如,如果myView.getWidth()返回10,视图是10像素宽在当前屏幕上,但与更高密度的屏幕的设备上,返回的值可能是15。如果您在使用你的应用程序代码的像素值与未预缩放当前屏幕密度位图的工作,你可能需要扩展您在您的代码中使用相匹配的未缩放源位图的像素值。

如果您的应用程序在运行时操作位图或处理的像素值,请参阅下面的章节关于额外密度的思考

3。不要使用AbsoluteLayout的

不像其他小部件的布局,AbsoluteLayout的强制使用固定位置来布置其子视图,这很容易导致不不同的显示器上运行良好的用户界面。正因为如此,AbsoluteLayout的已不建议使用的Android 1.5(API级别3)。

你应该使用RelativeLayout,它采用相对定位奠定了其子视图。例如,您可以指定一个按钮控件应该会出现“去权”的文本控件。

4。用大小和密度的特定资源

虽然系统扩展你的布局,并根据当前的屏幕配置可绘制资源,您可能要调整到UI上的不同的屏幕尺寸,并提供针对不同密度优化的位图可绘。这实质上是重申从本文前面的信息。

如果需要精确控制您的应用程序将如何看待不同的屏幕配置,调整布局和位图可绘制在配置特定的资源目录。例如,假设您要显示在中,高密度屏幕的图标。简单地以两种不同尺寸(例如100x100的中等密度和150×150的高密度)创建图标,并把两者的变化在适当的目录,使用适当的限定词:

RES / 绘制- MDPI / 图标PNG    / /作中等密度的屏幕
RES / 绘制- 华电国际/ 图标PNG    / /为高密度屏幕

注意:如果密度预选赛未在目录名中定义,系统会假设该目录中的资源是专为基准介质的密度和规模将用于其他适当的密度。

有关有效配置预选赛的详细信息,请参阅使用配置预选赛,本文档前面的。

其他注意事项密度


本节将介绍更多关于如何Android的执行缩放为不同的屏幕密度的位图可绘,以及如何可以进一步控制如何位图绘制在不同的密度。本节中的信息不应该是重要的大多数应用程序,除非您已在不同的屏幕密度运行,或者您的应用程序操纵的图形时遇到的应用程序中的问题。

为了更好地了解您如何可以在运行时操纵图形时支持多种密度,你应该明白,该系统有助于确保在以下方面的适当规模为位图:

  1. 预缩放的资源(如位图可绘)

    基于当前屏幕的密度,本系统采用任何尺寸或密度的特定资源从您的应用程序,并显示它们不进行缩放。如果资源不可用在正确的密度,系统加载默认的资源和需要相匹配当前屏幕的密度缩放它们上涨或下跌。该系统假定缺省资源(那些从目录中没有的配置预选赛)是专为基准屏幕像素密度(MDPI),除非他们是从密度特定的资源目录中加载。预缩放,因此,调整大小的位图到合适的大小当前屏幕密度,当系统做什么。

    如果你要求一个预分频资源的维度,系统返回表示尺寸值缩放。例如,在50×50像素的屏幕MDPI设计的位图缩放到75X75像素的HDPI屏幕上(如果没有替代资源,华电国际),系统报告的大小是这样。

    有一些情况下,您可能不希望Android能预分的资源。为了避免预缩放最简单的方法是把资源在资源目录与nodpi配置限定符。例如:

    RES / 绘制- nodpi / 图标PNG

    当系统使用的icon.png位图从该文件夹基于当前的器件密度,它不能扩展它。

  2. 自动缩放的像素尺寸和坐标

    应用程序可以通过设置禁用预缩放anyDensity:机器人“假”的清单或编程为一个位图设置inScaled“假”。在这种情况下,系统自动缩放任何绝对像素坐标和像素尺寸值在抽奖时间。它这样做是为了确保在像素定义的屏幕上的元素仍然显示在大约相同的物理尺寸,因为它们可能在基线屏幕密度(MDPI)。该系统透明地处理这一比例到应用程序,并报告缩放像素尺寸的应用程序,而不是物理像素尺寸。

    例如,假设一个设备具有WVGA的高密度屏幕,这是480×800,以及同样的大小作为一个传统的HVGA屏幕,但是它的运行有残疾学前缩放的应用程序。在这种情况下,该系统将“躺下”的应用程序时,它会查询屏幕尺寸,并报告320x533(近似MDPI翻译为屏幕密度)。然后,当应用程序绘制操作,如无效的矩形从(10,10)到(100,100),该系统通过缩放它们的合适量变换的坐标,和实际的区域(15,15),以无效(150,150)。这种差异可能会导致意外的行为,如果你的应用程序直接操作位图缩放,但是这被认为是一个合理的折衷,以保持应用程序尽可能好的性能。如果您遇到这种情况,请阅读以下章节DP单位转换为像素单位

    通常情况下,你不应该禁用预缩放。支持多个屏幕的最好方法是遵循上述基本技术如何支持多个屏幕

如果您的应用程序操纵位图或直接与一些其他的方式在屏幕上的像素进行交互时,你可能需要采取额外的步骤来支持不同的屏幕密度。例如,如果您回应计数的手指穿过的像素数目触摸手势,你需要的,而不是实际的像素用适当的密度无关的像素值。

缩放在运行时创建位图对象

图5。比较预分频和自动缩放位图,从 ApiDemos

如果您的应用程序创建一个内存位图(位图对象),系统会假设该位图是专为基线中等密度的屏幕,默认情况下,和自动缩放位图的绘制时间。该系统采用“自动缩放”的位图时,位图具有未指定的密度特性。如果你没有正确地考虑当前设备的屏幕密度,并指定位图的密度特性,自动缩放会导致缩放文物一样的,当你没有提供替代资源。

若要控制是否位图在运行时创建缩放或没有,你可以用指定位图的密度setDensity() ,传递的密度不断DisplayMetrics,如DENSITY_HIGHDENSITY_LOW

如果您要创建一个位图使用BitmapFactory,如从文件或流,可以使用BitmapFactory.Options来定义,因为它已经存在的位图的属性,这些属性决定是否或如何系统将扩展它。例如,您可以使用 量均字段来定义该位图设计的密度和inScaled字段指定位图是否应该扩展到匹配当前设备的屏幕密度。

如果设置inScaled领域,然后禁用任何预先定标,该系统可向位图时,系统会自动再大规模它在抽奖时间。使用自动缩放,而不是预缩放可以更昂贵的CPU,但使用较少的内存。

图5加载低(120)时显示了预规模和自动缩放机制的结果,介质(160)和高密度的屏幕上高(240)密度的位图。区别是微妙的,因为所有的位图被缩放,以匹配当前屏幕密度,但是缩放位图略有不同的外观取决于它们是否是预分频或自动缩放的抽奖时间。你可以找到源代码,这个示例应用程序,它演示了使用预分频和自动缩放位图,在 ApiDemos

注意:在Android中3.0及以上,应该有预分频和自动缩放位图之间没有明显的差异,由于改进的图形架构。

转换DP单位,以像素单位

在某些情况下,您将需要表达的维度DP,然后将它们转换为像素。想象在其中之后,用户的手指移动了至少16个像素的滚动或甩手势被识别的应用程序。在基线屏幕中,用户的必须由移动16个像素/ 160 dpi的,它等于一英寸(或2.5毫米)的十分之一之前的手势被识别。上具有高密度显示器(240DPI)的装置,该用户的必须由移动16个像素/ 240 dpi的,它等于一英寸(1.7毫米)1/15th。的距离更短,该应用程序从而在用户看来更为敏感。

要解决此问题,手势门槛必须以代码DP,然后转化为实际的像素。例如:

/ /表示DP的手势门槛
私人 静态 最终 浮动GESTURE_THRESHOLD_DP =  16.0f ; 

/ /获取屏幕的密度规模
最终 持股量规模=  getResources () getDisplayMetrics () 密度; 
/ /将DPS像素,基于密度的规模
mGestureThreshold =  整数 GESTURE_THRESHOLD_DP * 规模+  0.5F ); 

/ /使用mGestureThreshold为以像素为单位的距离...

DisplayMetrics.density字段指定必须使用转换的比例因子DP单位为像素,根据当前的屏幕密度。在中等密度的屏幕,DisplayMetrics.density 等于1.0;高密度屏幕上它等于1.5;一个额外的高密度的屏幕上时,它等于2.0;和低密度的屏幕上,它等于0.75。这个数字是由你应该乘以系数DP订购单位以获取当前屏幕的实际像素数。(然后加入0.5F转换为整数时四舍五入的数字到最接近的整数。)欲了解更多信息,请参阅DisplayMetrics类。

而不是定义一个任意的门槛,这种类型的事件不过,你应该使用,可从预分频的配置值ViewConfiguration

使用预分频的配置值

您可以使用ViewConfiguration类访问常用的距离,速度和所使用的Android系统时间。例如,在所使用的框架,作为滚动阈值的像素的距离可以用以下方式获得getScaledTouchSlop() 

私人 静态 最终 诠释GESTURE_THRESHOLD_DP =  ViewConfiguration 得到myContext )。getScaledTouchSlop ();

在方法ViewConfiguration开始与getScaled前缀,保证以像素为单位,将正确显示,无论当前屏幕密度的返回值。

如何测试你的应用程序在多个屏幕上


图6。 一套自动真空淀积系统进行测试屏幕的支持。

在发布你的应用程序,你应该彻底它在所有支持的屏幕大小和密度的测试。Android SDK中包含模拟器的皮肤可以使用,复制其中的常见的屏幕配置的大小和密度对您的应用程序可能运行。您也可以修改默认大小的仿真器样机,密度和分辨率复制任何特定屏幕的特性。使用模拟器的皮肤和其他自定义配置,使您可以测试任何可能的屏幕配置,所以您不必购买不同的设备,只是为了测试你的应用程序的屏幕支持。

要设置用于测试你的应用程序的屏幕支持的环境中,你应该创建一个系列自动真空淀积系统(Android的虚拟设备),采用仿真皮和屏幕配置,模拟你希望你的应用程序支持的屏幕尺寸和密度。要做到这一点,你可以使用AVD Manager创建的自动真空淀积系统和图形界面启动它们。

要启动Android SDK的经理,执行SDK的manager.exe从你的Android SDK目录(仅在Windows上)或执行的android<SDK> /工具/目录下(在所有平台)。图6显示了AVD管理与选择自动真空淀积系统中,用于测试各种屏幕配置。

表3显示了不同的仿真器样机是在Android SDK中可用,您可以用它来模拟一些最常见的屏幕配置。

有关创建和使用自动真空淀积系统来测试您的应用程序,看到更多的信息与AVD管理管理自动真空淀积系统

表3。不同的屏幕配置可以从Android SDK中(以粗体显示)的仿真器样机和其他代表的决议。

  低密度(120),LDPI 中等密度(160),MDPI 高密度(240),华电国际 超高密度(320),xhdpi
屏幕 QVGA(240×320)   480×640  
正常屏幕 WQVGA400(240X400)
WQVGA432(240x432)
为HVGA(320×480) WVGA800(480×800) 
WVGA854(480×854)
 
600x1024
640×960
屏幕 WVGA800 *(480×800) 
WVGA854 *(480×854)
WVGA800 *(480×800)
WVGA854 *(480×854)

600x1024
   
超大屏幕 1024×600 WXGA(1280×800)
1024×768 
1280×768
1536x1152 
1920x1152 
1920x1200的
2048×1536 
2560x1536 
2560x1600分辨率
*为了模拟这种结构,创建使用WVGA800或WVGA854皮肤AVD时指定的160自定义密度。
**要模拟这种配置,创建一个使用WVGA800或WVGA854皮肤AVD时指定的120自定义密度。
†这种皮肤可与Android 3.0平台

要看到,支持任何给定的屏幕配置有源器件的相对数,请参阅屏幕大小和密度 仪表板。

图7。 尺寸和密度选项可以设置,开始从AVD管理一个AVD时。

我们还建议您在设置为在那个最接近实际设备的物理尺寸上运行的模拟器测试应用程序。这使得它更容易进行比较的结果在不同大小和密度。要做到这一点,你需要知道的大概密度,以dpi为单位,电脑显示器(例如,一个30“戴尔显示器具有约96 dpi的密度)。当您从AVD管理器启动一个AVD,您可以指定屏幕尺寸在启动选项的模拟器和您的显示器的DPI,如图7。

如果你想测试你的应用程序使用不支持内置的皮肤决议或密度的屏幕上,你可以创建一个使用自定义分辨率或密度的AVD。当从AVD Manager创建的AVD,指定而不是选择的分辨率,内置的皮肤。

如果您是从命令行启动你的AVD,您可以用模拟器指定比例尺度的选择。例如:

模拟器- AVD <avd_name>  - 规模96DPI

要细化仿真器的大小,你能传递的规模选项之间的一个数字0.1和3表示所需的缩放因子。



原文地址:http://developer.android.com/guide/practices/screens_support.html

posted @ 2014-03-14 11:02  木尘-MCDNF  阅读(398)  评论(0编辑  收藏  举报