一.布局适配建议

1.不要使用绝对布局

2.尽量使用 match_parent 而不是 fill_parent 

3.能够使用比重的地方使用比重(layout_weight="1")

4.纯色背景和规则图形使用shape

5.在特定分辨率下通过添加 layout_WxH.xml 如 layout_1800x1080.xml layout_port.xml竖屏 layout_land.xml横屏

二.术语和概念

1.屏幕尺寸:屏幕尺寸也是物理尺寸,常见small, normal, large, xlarge (2.3之后添加的分类)

  • small screens are at least 426dp x 320dp
  • normal screens are at least 470dp x 320dp
  • large screens are at least 640dp x 480dp
  • xlarge screens are at least 960dp x 720dp

2.屏幕密度:一定物理区域内的像素的数量,通常简称dpi,每英寸像素数,常见ldpi(low),mdpi(medium),hpdi(high),xhdpi(extra high) (2.2之后添加的分类)

3.一般情况下的普通屏幕:

  • A set of six generalized densities:
  • ldpi (low) ~120dpi
  • mdpi (medium) ~160dpi
  • hdpi (high) ~240dpi
  • xhdpi (extra-high) ~320dpi
  • xxhdpi (extra-extra-high) ~480dpi
  • xxxhdpi (extra-extra-extra-high) ~640dpi  

          该值通过如下方式获取:getResources().getDisplayMetrics().densityDpi

4.方向:屏幕方向,分横和竖

5.分辨率:屏幕上的物理像素总数,

6.密度无关的像素数dp,定义UI布局时使用,可与px换算

7.布局:物理尺寸对应布局,layout-small(小于3寸),layout_normal(4.5英寸左右),layout_large.xml(4-7寸之左右),layout_xlarge(7-10寸左右)

三.适配

1.显示声明:

<supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>

2.提供不同尺寸的布局

Android多屏显示方案 安卓多屏显示_android

3.提供不同屏幕密度的图片

   

Android多屏显示方案 安卓多屏显示_Android多屏显示方案_02

 

  4.

To create alternative bitmap drawables for different densities, you should follow the  3:4:6:8:12:16 scaling ratio  between the six generalized densities. For example, if you have a bitmap drawable that's 48x48 pixels for medium-density screens, all the different sizes should be:

  • 36x36 (0.75x) for low-density
  • 48x48 (1.0x baseline) for medium-density
  • 72x72 (1.5x) for high-density
  • 96x96 (2.0x) for extra-high-density
  • 180x180 (3.0x) for extra-extra-high-density
  • 192x192 (4.0x) for extra-extra-extra-high-density (launcher icon only; see note above)

To help you target some of your designs for different types of devices, here are some numbers for typical screen widths:

  • 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
  • 480dp: a tweener tablet like the Streak (480x800 mdpi).
  • 600dp: a 7” tablet (600x1024 mdpi).
  • 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

最小宽度    sw<N>dp    屏幕的基本尺寸,是指最短的可用屏幕区域。具体的说,设备的最小宽度是屏幕可用的宽度和高度中最短的那个(也可以把它看做是屏幕的最小可能的宽度)。这样就可以使用这个限定符来确保应用程序至少有<N>dp的宽度可用于UI界面,而不管屏幕的当前方向。

例如,如果布局在任何时候都需要至少600dp的最小屏幕尺寸,那么就能够使用这个限定符,在res/layout-sw600dp/目录中创建布局资源。系统只会在可用屏幕的尺寸至少是600dp的时候才会使用这些资源,而不管600dp是否是被用户认知的高度或宽度。最小宽度是设备的固定屏幕尺寸特征,当屏幕的方向发生改变时,设备的最小宽度不改变。 例如:

sw320dp

sw600dp

sw720dp  等

可用宽度    w<N>dp    指定最小的可用屏幕宽度,在资源中应该以dp为单位来定义<N>的值。当方向在横向和纵向之间改变时,这个配置值会跟当前的实际的宽度相匹配。

例如:

w720dp

w1024dp  等

可用高度   h<N>dp    指定最小的可用屏幕高度,在资源中应该以dp为单位来定义<N>的值,当方向在横向和纵向直接改变时,这个配置值应该跟当前的实际高度匹配。

例如:

h720dp

h1024dp等