关于支持多种屏幕尺寸的编程

关于支持多种屏幕尺寸的编程


本文根据参考文档写成,只列出了基本概念和一些原则性的东西。强烈推荐大家阅读下参考文档。对这个主题阐述的非常详细。

 

下面介绍一些Android应用开发中与不同设备展示相关的一些术语:

屏幕尺寸(Screen size)

    屏幕的物理尺寸。 根据屏幕的对角线长度确定。简而言之,Android把屏幕尺寸分为四大类: 小( small),中等( normal),大(large), 和超大( extra large)。图一表示了屏幕尺寸的划分标准。

屏幕密度(Screen density)

    表示在一定的物理区域内能够显示的点的数目,通常用dpi(dot per inch)作为单位衡量。Dpi 的含义是一英寸之内有多少个点。密度越小的显示设备在固定区域内显示的点数越少。通常,Android根据显示密度把屏幕也分为四种:低(low),中(medium),高(high),超高(extra high)。图一表示了屏幕密度的划分标准。

屏幕方向(Orientation)

    屏幕方向。包括横屏和竖屏。不同的设备有不同的缺省的屏幕方向。而且屏幕方向在运行时可以通过用户的旋转操作而更改。

分辨率(Resolution)

    一屏能显示的物理点数。在开发支持多屏显示的应用过程中,应用程序不应该直接根据屏幕的分辨率来设置。而应该更多考虑屏幕尺寸和密度。

密度无关像素(Density-independent pixel /dp)

    一种虚拟的像素单位,用此单位设计应用程序界面布局可以实现多屏幕支持效果。Dp表示的是一个准确的物理长度。它的大小等于显示密度为160dpi的一个像素的大小。如果在设计应用布局时以dp为单位。Android系统在渲染界面时会根据当前屏幕特显示密度来调整显示大小。有一个计算公式可以表明在不同显示密度屏幕上的像素显示大小为:

    dp = px * (dpi / 160)

    例如: 在显示密度为240dpi的屏幕上,一个dp的显示大小应该为1.5像素。

Sp(scale-independent pixel)

    用于定义字体尺寸,和dp类似。

Pt(Point)

    point,是一个标准的长度单位,1pt=1/72英寸。

 

关于屏幕尺寸

       

 

从1.6版本开始,Android提供了支持多种屏幕尺寸和多种分辨率的机制。后文会详细介绍这些机制。

同时,Android 对屏幕尺寸和显示密度做了如下定义:


                  图一 android 系统对屏幕尺寸和密度的大概划分

 

    xlarge: 960dp x 720dp

    large : 640dp x 480dp

    normal: 470dp x 320dp

    small :426dp x 320dp

 


    在我们应用程序中,如果使用固定的物理长度作为度量,就可以避免由于不同屏幕的差别所带来的显示效果的不同。下面的例子可以很好的说明这个问题:

   

   

                       图二未使用显示密度无关方案的效果

 

                      图三使用了显示无关方案的效果图

 

显然,图二中的例子是使用px作为单位来定义控件,这样导致在显示密度更高的屏幕上,控件明显变小了。图三中使用dp作为单位定义控件尺寸,当屏幕的显示密度增加时,会根据显示密度调整控件的显示大小。

如何支持多屏幕的编程

 根据屏幕尺寸定制资源

Android提供了一套机制,可以根据当前设备的不同显示配置选择合适的方式渲染UI.例

如,可以通过自动拉伸/缩小布局或者缩放图片达到最佳的现实效果。如果用户想更加完美的处理这个问题,就需要做到以下几点:

1.     在manifest文件中准确声明应用程序支持的屏幕尺寸。可以通过在manifest 文件中添加<supports-screens>元素来实现此限制。

2.     为不同的屏幕尺寸实现不同的布局。

3.     为不同显示密度的屏幕提供不同的图片。

 

在缺省情况下,android会自动对应用的界面进行缩放以适应当前屏幕大小。大部分情况下都能正常工作。但在少部分情况下,效果可能不是那么完美。例如,在很大的屏幕上,为了有效的利用屏幕空间,给用户更好的用户体验,就需要为用户定制大屏的界面布局。

为了实现这一功能,需要用户自己针对大屏特别定制布局。具体方法是:定义 layout-xlarge布局目录,将布局文件放置于这个目录之中即可。通常使用的目录有:layout-small, layout-normal, layout-large和layout-xlarge。

Android 3.2版本之后,这种方法已经废弃不用了。取而代之的是更加精确的方法,使用sw<N>dp的格式来定义符合屏幕尺寸的布局。例如layout-sw600dp表示此布局可应用于宽度至少为600dp的屏幕。

 

         缺省情况下,Android会自动缩放图片以适应屏幕大小。但是图片的放大和缩小都会影响图片的质量,导致不能获得最佳的展示效果。因此,同样需要针对不同的显示密度定制不同的图片资源。

          具体方法和定制屏幕尺寸类似,分别将不同的图片资源放置在不同的资源文件目录中。目录名称命名规则如下:drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xhdpi.

 

      更详细的介绍,可以查看参考文档。

 

推荐布局方式

为了开发出具有更好屏幕适应性的应用程序,在开发过程中我们需要遵循以下原则:

 

1.        在布局中使用match_parent,wrap_content,dp 等方式进行定义。这种方式定义的布局在

拉伸和缩小过程中能够较好的保证布局质量。例如,定义宽度:layout_width="100dp"。则在显示密度为160的屏幕上,宽度为160个像素。而在显示密度为240的屏幕上,显示长度则为150像素。

 

同样,对于文字大小的定义也建议使用sp。

 

2.        不要再应用程序代码中使用硬编码的像素值。因为在android系统中是使用基于当前屏

幕显示密度下的像素值作为坐标的标准单位。例如,对指定view调用myView.getWidth()返回值为10.表示在当前屏幕上这个view的宽度为10个像素。如果换了一个高显示密度的屏幕,这个返回值可能便成为15。

 

3.        不要使用AbsoluteLayout。

4.        使用尺寸和显示密度相关的资源。如2.1节所示,为了获得更好的效果,我们需要为

不同尺寸和不同显示密度的屏幕定制不同的布局和图片资源。

 

 

        参考文档: Androiddoc, 选择dev guide,从左侧Best Practices下面选择Supporting Multiple Screens。 强烈推荐大家阅读下这篇文档,写的非常详细。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值