一,为什么要进行屏幕的适配
安卓手机屏幕尺寸种类繁多。同一程序要在不同尺寸手机上运行到良好的效果,实现相同的功能。如果给每一尺寸的手机编写一套程序,这无疑是不可能的。所以,要进行屏幕适配。不同分辨率手机所占的比例。
二,相关概念
1>尺寸 手机屏幕的对角线长度(英寸为单位)1英寸=2.54cm
2>分辨率 横纵向上的像素点数 单位:px
3>像素密度 每英寸上的像素密度dpi(dot per inch) 计算:分辨率:1920*1080 尺寸4.95 dpi = (1920*1920+1080*1080)开方/4.95
4>像素px 构成图像最小单位
5>dpi dp 密度无关像素
6>sp 根据文字大小选项进行放缩(12sp以上,首选 12,14,18,22)
7>mdpi hdpi xhdpi xxhdpi xxxhdpi
三,屏幕适配的一些方法
1>支持各种屏幕尺寸
2>使用Weight
Weight 计算出来的长度 = 原来的宽度 + 所占剩余百分比的宽度
Eg1:weight设置为1,width设置为0dp(wrap_content也可以)
Eg2:weight设置为1,width设置为match_parent
Eg2计算过程: L=L + (L-2L)*1/3 = 2/3L
3>尽量使用相对布局(但要根据具体情况而定)
4>使用large限定符(尺寸限定)
3.2版本之前实用,在res文件夹下,重新创建一个文件夹layout-large(布局文件取相同的名字)
5>最小限定符(屏幕宽度限定)
3.2之后版本实用,在res文件夹下,重新创建一个文件夹layout-600sw(布局文件取相同的名字,600是自己设 定的)
6>使用别名布局
1,在res下建不同布局文件
res/layout/main.xml 单面板布局
res/layout/main_twopanes.xml 双面板布局(大分辨率使用)
2.在res/values文件夹下,创建resource文件layout.xml(名字都是main,@里面的资源就是你的布局文件)
res/values/layout.xml:
<resources>
<item name="main"type="layout">@layout/main</item>
</resources>
Android3.2之前的平板布局
在res/values-large文件夹下(没有就创建一个),创建resource文件layout.xml(名字都是main,@里面的 资源就是你的布局文件)
res/values-large/layout.xml:
<resources>
<item name="main"type="layout">@layout/main_twopanes</item>
</resources>
Android3.2之后的平板布局
在res/values-sw600dp文件夹下(没有就创建一个,600dp是自己写入的,即最小尺寸,也就是说超过了这个 尺寸,就加载这个布局),创建resource文件layout.xml(名字都是main,@里面的资源就是你的布局文件)
res/values-sw600dp/layout.xml:
<resources>
<item name="main"type="layout">@layout/main_twopanes</item>
</resources>
3. 在oncreate方法中,加载布局是setContentView要改成:setContentView(R.layout.main);
7>屏幕方向限定符(即在屏幕横向和纵向的时候显示响应显示不同的布局)
res/values-sw600dp-land/layouts.xml:
<resources>
<item name="main"type="layout">@layout/main_twopanes</item>
</resources>
res/values-sw600dp-port/layouts.xml:
<resources>
<item name="main"type="layout">@layout/main</item>
</resources>
8> .9图片的运用
.9图片的制作工具在sdk/tools文件夹下
上边 设置一像素决定左右拉伸不变形
左边 设置一像素决定上下拉伸不变形
右边和下边 内容承载的区域(在没有设置padding的情况下,内容与背景的padding也和这个有关系)
9> 使用非密度制约像素
把dp转成px。但这个和Google的的建议相违背,是情况而定。
10>提供备用位图(即在mdpi hdpi xhdpi xxhdpi xxxhdpi文件夹下尽可能的放入不同分辨率的相对应同一效果的位 图)