Android支持多屏幕(2)How to Support Multiple Screens

来源:互联网 发布:java 九九乘法表直式 编辑:程序博客网 时间:2024/05/18 00:26

Android支持多屏幕(2)How to Support Multiple Screens

转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/23666187

 

翻译自:http://developer.android.com/guide/practices/screens_support.html

 

概览

Android能支持多屏幕的基础就是它又能力根据当前的屏幕来画出合适的layout和图片资源。系统已经为你处理了很多事情,包括帮助你根据当前的屏幕size和density缩放layout以及图片资源。胆识,为了更好的适应不同的屏幕,你需要做下面这些事情:

l   显示的声明你的应用支持的屏幕大小。

通过声明你的应用支持的屏幕大小,可以确保只有你的应用支持的屏幕类型的设备可以下载你的应用。声明支持不同的屏幕大小也会影响系统如何在更大的屏幕上绘制你的程序-比如你的程序是否是屏幕兼容的。

你需要在manifest文件中使用<supports-screens>来声明你的程序支持的屏幕大小。

 

l   为不同的屏幕大小提供不同的layouts

默认情况下,Android会自动的为你的应用调整layout的大小。很多时候,这都没有什么问题。但是,有时候你的UI会看起来不是很好,需要去为不同的屏幕大小来调整UI。比如,在一个大屏幕上,你可能想调整一些UI控件的大小和位置来更好的利用屏幕的控件,或者在小屏幕上,你想要调整大小来将所有的控件都很好的装进这个屏幕。

 

这些为大小而提供的限定符包括small,normal,large和xlarge。比如,extra large的屏幕需要把layout放在layout-xlarge/下面。

 

从Android3.2开始,这些对屏幕size的分组已经被弃用了,你需要用sw<N>dp限定符来定义你的layout支持的最小宽度。比如,一个平板的多面板布局需要至少600dp的屏幕宽度,所以你应该把你的layout放在layout-sw600dp/中。后面的章节将更详细的讲解如何使用新技术来声明layout资源文件。

 

l   为不同的屏幕密度提供不同的图片资源

 

默认情况下,Android会帮你缩放图片资源(.png,.jpg.gif文件)以及9.png文件,这样他们就能在不同大小的屏幕上画出正确的UI比如,如果你的应用只提供了baseline的图片资源,即medium屏幕密度(mdpi)的资源,系统会帮你拉伸图片以适应高密度的屏幕,缩小他们以适应低密度的屏幕。这会让你的图片变得模糊。为了保证你的图片看起来漂亮,你需要为不同的screen densitits提供不同的图片资源。

为屏幕密度提供的限定符包括ldp(low),mdpi(medium),hdpi(high),和xhdpi(extra high)。比如,对于high-density屏幕的图片应该放到drawable-hdpi/下面。

 

 

在运行时,系统通过下面的步骤来保证这些资源能最好的适应当前的屏幕:

1.       系统选择使用合适的资源

根据当前屏幕的size和density,系统使用符合当前屏幕size和density的资源。比如,系统想在一个hegh-density屏幕上使用一张图片的时候,系统寻找一个最合适的资源文件夹中的资源文件。其他资源文件夹中得文件也存在的时候,系统会选择hdpi文件夹中的文件。

 

2.       如果没有找到正好匹配的资源,系统会使用默认的资源,然后对它进行缩放来适应当前的屏幕大小和密度。

默认的资源就是那些没有添加限定符的资源。比如,drawable/文件夹中的文件就是默认的图片资源文件。系统假定这些默认的资源文件是根据baseline screen屏幕来设计的,即normal screen size和medium density。然后,系统放大这些资源来适应high-density屏幕并且缩小这些资源来适应low-density屏幕。

但是,当系统没有找到正好匹配某个density的资源文件的时候,不总是使用默认的资源。系统可能会使用其他density-specific的资源来获得更好的缩放效果。比如,当没有找到一个low-density资源的时候,系统更喜欢缩小一个high-density下得资源,因为系统可以很简单的通过0.5的缩放比例来缩放high-density的资源,比使用0.75的缩放比例来缩放medium-density的资源效果更好。

想要了解更多系统如何选择资源来适应屏幕的信息可以阅读这篇文章。

 

Using configuration qualifiers

系统支持很多种资源限定符来让你控制系统根据当前的屏幕特征选择你提供的资源文件。这些限定符就是你在资源文件夹名字后面跟上的一个字符串。

 

使用限定符

1.       用以下的格式在res文件夹下面创建一个新的文件夹:

<resources_name>-<qualifier>

<resources_name>是标准的资源文件夹的名字,比如drawable或者layout。

<qualifier>是下表中的限定符,规定了这些资源文件是用在哪种屏幕上的(比如hdpi或者xlarge)

2.       将资源文件分别放到正确的文件夹中。这些资源文件的名字必须和默认资源文件夹中的文件名字一样。

比如,xlarge是extra large屏幕的限定符。当你在一个资源文件夹的名字后面加上这个字符串的时候(比如layout-xlarge),这就告诉系统这个文件夹中的资源文件是位extra large屏幕提供的。

Screen characteristic

Qualifier

Description

Size

small

Resources for small size screens.

normal

Resources for normal size screens. (This is the baseline size.)

large

Resources for large size screens.

xlarge

Resources for extra large size screens.

Density

ldpi

Resources for low-density (ldpi) screens (~120dpi).

mdpi

Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)

hdpi

Resources for high-density (hdpi) screens (~240dpi).

xhdpi

Resources for extra high-density (xhdpi) screens (~320dpi).

nodpi

Resources for all densities. These are density-independent resources. The system does not scale resources tagged with this qualifier, regardless of the current screen's density.

tvdpi

Resources for screens somewhere between mdpi and hdpi; approximately 213dpi. This is not considered a "primary" density group. It is mostly intended for televisions and most apps shouldn't need it—providing mdpi and hdpi resources is sufficient for most apps and the system will scale them as appropriate. If you find it necessary to provide tvdpi resources, you should size them at a factor of 1.33*mdpi. For example, a 100px x 100px image for mdpi screens should be 133px x 133px for tvdpi.

Orientation

land

Resources for screens in the landscape orientation (wide aspect ratio).

port

Resources for screens in the portrait orientation (tall aspect ratio).

Aspect ratio

long

Resources for screens that have a significantly taller or wider aspect ratio (when in portrait or landscape orientation, respectively) than the baseline screen configuration.

notlong

Resources for use screens that have an aspect ratio that is similar to the baseline screen configuration.

 

比如,下面列出了一个应用程序为不同的screen size提供的不同的layout以及为不同的screen density提供的不同的图片资源文件。

res/layout/my_layout.xml           // layout fornormal screen size ("default")
res/layout-small/my_layout.xml      // layout for small screen size
res/layout-large/my_layout.xml      // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml// layout for extra large in landscapeorientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png      // bitmap for extra high density

需要注意的是,Anroid系统是用这样的逻辑在运行时选择“best matching”资源的。当系统在选择基于size的限定符的资源的时候,不能找到最合适的,系统会选择比现在屏幕更小得资源文件夹中的资源(比如,如果有必要,系统会为一个large-size的屏幕选择normal-size屏幕的资源)。但是,如果只有比你当前屏幕大得资源文件匹配,你的程序会crash(比如,你的屏幕是normal-size,但是所有的layout资源都放在xlarge限定符的文件夹中)。

 

Designing alternative layout and drawables

你应该根据你的应用程序的需求来提供不同的资源。通常,你应该用size和屏幕方向限定符来提供不同的layout文件,使用density限定符来提供不同的图片资源。

下面的章节介绍了怎样通过size和density来提供不同的layout和图片资源。

 

可供选择的layout

当你在不同的屏幕上测试你的应用的时候,你就知道是否需要为你的应用提供多套不同的UI,比如:

l   你可能发现你的程序不适应小屏幕。比如,一排按钮不能很好的在小屏幕的宽度范围内显示。这样,你就需要为小屏幕提供一套UI来调整这些按钮的大小和位置。

l   当在大屏幕上测试的时候,你发你的布局没有很好的利用大屏幕的空间,他们被很明显的拉伸。这样,你就需要为这些大屏幕设计一套UI来很好的优化你的布局。

l   当在横屏下测试的时候,你可能发现竖屏模式下屏幕底部的UI控件应该被移动横屏模式下屏幕的右边。

 

概括的说,你应该保证你的布局:

l   适应小屏幕

l   为大屏幕做过优化,以更好的利用大屏幕的控件

l   为横屏和竖屏做过优化设计

 

如果你的UI中使用的图片资源要很好的适应被系统自动缩放后的控件大小(比如一个按钮的背景图片),你应该使用9.png图片。9.png文件是一个png文件,你在这个文件中定义了可拉伸的区域。当系统要拉伸这个9.png文件的时候,它只会拉伸可拉伸的区域。这样,你不必为不同的屏幕提供不同的图片文件,因为9.png可以被很好的调整到合适的大小。但是,你依然应该为不同的screendensities提供不同的图片文件,防止图片被拉伸后变得模糊。

 

Alternative drawables

基本上所有的应用程序都应该有适应不同screendensities的可供选择的图片资源,因为每个程序都有一个launcher icon,而这个图片要在不同的screen densities上看起来都很漂亮。同样的,如果你的应用使用了其他的图片资源,你也应该为他们提供支持不同screen densities的图片资源。

 

注意,你只需要为bitmap文件(.png,.jpg或者.gif)和9.png提供density-specific的文件。如果你使用xml来定义shapescolors,或者drawableresources,你应该把他们房子啊默认图片资源文件夹(drawable/)下面。

 

要为不同的densities提供不同的图片资源,你应该使用3468的缩放比例来生成这些图片。比如,如果你为medium-density屏幕设计了一个48x48

像素的图片,那么所有的这些广义density中的图片大小应该是:

l   36x36 for low-density

l   48x48 for medium-density

l   72x72 for high-density

l   96x96 for extra high-density

 

0 0
原创粉丝点击