android屏幕适配攻略

来源:互联网 发布:如何注册淘宝旺旺 编辑:程序博客网 时间:2024/06/05 11:44

一、计量单位概念

1.、屏幕尺寸:屏幕对角线长度(英寸)

2、屏幕分辨率:纵向像素x横向像素;单位是px

3、像素密度:dpi,每英寸像素点个数,计算方式:像素密度=对角线像素个数/对角线英寸长度;   对角线像素点个数等于纵向像素和横向像素开平方根

4、px(构成图像最小单位),dp,dip(密度无关像素),以160dpi为基准,1dp=1px

5、在不同屏幕密度大小下根据不同的图片分辨率将图片放在drawable下不同的文件夹下:drawable-mdpi(120-160dpi),drawable-hdpi(160-240dpi) ,drawable-xhdpi(240-320dpi),drawable-xxhdpi(320-480dpi),drawable-xxxhdpi(480-640dpi),在不同屏幕大小下通过values文件夹限定符提供不同的值,原理同图片drawable


二、屏幕适配解决方案:

1、支持各种屏幕尺寸

1.1、使用wrap_conteht    match_parent   layout_weight(权重)

weight属性的真实含义——> 计算出的宽度= 空间原来宽度+剩余空间所占百分比的宽度(屏幕总宽度—空间总宽度= 剩余宽度)

1.2、使用相对布局,禁用绝对布局

1.3、使用限定符

layout-large 适配android3.2以下设备,最小宽度限定符layout-sw600dp适配3.2以上版本

如果要兼容3.2以下,layout-large和layout-sw600dp必须同时使用

为了更好的兼容低版本,可使用布局别名来更好兼容并统一管理:

原来的写法

res/layout/main.xml 单面板布局

res/layout-large/main.xml 多面板布局(3.2以下版本)

res/layout-sw600dp/main.xml 多面板布局(3.2以上版本)

采用布局别名的写法:

1)setContentView(R.layout.main);

2)res/layout/main.xml

   res/layout/main_twopanes.xml

3)values资源限定:

单面板默认布局: 

res/values/layout.xml

<resources>

<item name="main" type = "layout">@layout/main</item>

</resources>

android3.2以下版本多面板布局:

res/values-large/layout.xml

<resources>

<item name = "main"   type = "layout" >@layout/main_twopanes</item>

<resources>

android3.2以上版本多面板布局:

res/values-sw600dp/layout.xml;

<resources>

<item name = "main"   type = "layout" >@layout/main_twopanes</item>

<resources>

使用屏幕方向限定符:

res/values-sw600dp-land/layout.xml

<resources>

<item name = "main"   type = "layout" >@layout/main_twopanes</item>

<resources>

res/values-sw600dp-port/layout.xml

<resources>

<item name="main" type = "layout">@layout/main</item>

</resources>

1.4、使用自动拉伸位图(点九图)

图片命名——> image.9.png

左边和上边——>拉伸点

右边和下班——>间隔区(类似padding)


2、支持各种屏幕密度

2..1 、使用非密度制约像素

解决屏幕宽度不一致的问题,基本思路是以320为基准将屏幕均分为320份,不同屏幕大小每份的dp大小不一致:

1) values文件限制不同屏幕

values-1920*1080   lay_x.xml  lay_y.xml

values-480*320     同上

注意:在values当中需要放一个默认的lay_x.xml 和lay_y.xml文件,当values分类中没有时会采用默认的values

2)lay_x.xml文件内容

<resources>

<dimen name = "x1">1.0dp</dimen>

<dimen name = "x2">2.0dp</dimen>

<dimen name = "x3">3.0dp</dimen>

. ....

<dimen name = "x320>320dp</dimen>

3)在layout.xml布局文件中设置长宽像素:

android:layout_width = "@dimen/x280"...


2..2、提供备用位图

将不同像素图片放置在相应文件夹

如果将高分辨率图放在低分辨率文件夹下,虽然图片不受影响,但是会占用更多内存


3、实施自适应用户界面流程


0 0