屏幕适配全攻略

来源:互联网 发布:ucosiii软件定时器 编辑:程序博客网 时间:2024/05/02 02:40

屏幕适配:适配主要的6种分辨率。
主要问题:
1.什么是屏幕尺寸,屏幕分辨率,屏幕像素密度?
屏幕尺寸:屏幕对角线的长度,单位为英寸,一英寸=2.54厘米。
屏幕分辨率:在横纵向上的像素点数,单位为px,1px=1个像素点。如1920*1080.
屏幕像素密度:每英寸上的像素点数,单位为dpi。屏幕像素密度与屏幕尺寸和屏幕分辨率有关。如nexus 5的dpi为445.
2.什么是dp,dpi,sp,px?之间的关系是什么?
px:构成图像的最小单位。一般在ui设计,使用android原生api,返回的数值单位都是px。
dp: density independent pixels的缩写,即密度无关像素。以160dpi为基准,1dp=1px。
sp:scale independent pixels,可以根据文字大小首选项进行放缩。推荐使用12,14,18,22sp。尽量不使用12sp以下的数值。
3.什么是mdpi,hdpi,xdpi,xxdpi?如何计算和区分?
mdpi:120dpi-160dpi
hdpi:160-240
xhdpi:240-320
xxhdpi:320-480
xxxhdpi:480-640
应该按照2:3:4:6:8的比例进行放缩。

解决方案:
1.支持各种屏幕尺寸
2.支持各种屏幕密度
3.实施自适应用户界面流程

支持各种屏幕尺寸:
使用wrap_content,match_parent,weight
使用相对布局,禁用绝对布局
使用限定符:
1.使用尺寸限定符(将layout与layout-large并存),但这是在android3.2前使用的。在android3.2后,为了更好的细分平板的尺寸,引入最小宽度限定符。(layout-sw600dp(small width(长和宽中相对较小的一边)))
2.使用最小宽度限定符
要是要兼容3.2前的版本,那么我们就需要维护三个xml:
res/layout/main.xml
res/layout-large/main.xml
res/layout-sw600dp/main.xml
维护很麻烦!

3.使用布局别名

使用布局别名res/layout/main.xml:            单面板布局res/layout-large/main.xml:      多面板布局res/layout-sw600dp/main.xml:        多面板布局res/layout/main.xml             单面板布局res/layout/main_twopanes.xml        双面板布局setContentView(R.layout.main);默认布局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>

4.使用屏幕方向限定符

res/values-sw600dp-land/layouts.xmlres/values-sw600dp-port/layouts.xml

综合运用:
这里写图片描述
使用自动拉伸位图

支持各种屏幕密度:
解决方案:
1.使用非密度制约像素(将所有分辨率的手机长和宽都平分为相同等分,比如长分为360,宽分为480,然后用占用的分数来提供长宽度,缺点是需要为每种分辨率都提供,不然默认地就是drawable目录下的默认单位,太麻烦!)
2.提供备用位图
这里写图片描述

试验:
这里写图片描述
结论:
在进行UI切图的时候,不要只针对一种分辨率进行切图,而是尽可能多的覆盖我们的屏幕密度。这关系到内存消耗的问题。只有合适的切图放在合适的文件夹才是最合适的。

0 0
原创粉丝点击