博客开篇不说废话,直接进入正题!
做开发一段时间了,也自己总结了一些屏幕适配以及图片适配的一些经验,拿出来跟大家分享一下,这里不结束具体使用方法,仅仅提供总结,对于相关知识点请自行百度。
1.对xml布局文件中的属性进行适配
问题提出:xml布局文件里面会对属性设置很多的值,比如margin-left,padding,layout_width等设置相应的dp,但是这样对于不同的手机分辨率如何做到适配呢?
解决方式:在Android开发目录下存在着value文件夹,values/dimens的xml文件夹中写的就是一些与布局属性相关的值可以在res目录下,新建多个values-XXXX*XXXX进行适配,这里就不详细去介绍了,网上方法多的是。
2.weight权重适配
在控件中使用属性android:layout_weight="1"可以起到适配效果,但是该属性的使用有如下规则:
只能用在线性控件中,比如LinearLayout。
竖直方向上使用权重的控件高度必须为0dp(Google官方的推荐用法)
水平方向上使用权重的控件宽度必须为0dp(Google官方的推荐用法)
3.Layout适配
与第一种方法类似,直接在res目录下,新建多个layout-XXXX*XXXX文件夹,写多套布局,这样可以根据不同的手机的密度加载不同文件夹下的布局文件
4.java代码适配
在java代码中获取屏幕的宽高:
DisplayMetrics dm = new DisplayMetrics();
//获取屏幕信息
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
int screenHeigh = dm.heightPixels;
对布局中的控件进行layoutparams的参数设置。
5.通过一个5.0之后出现的系统类实现,PercentRelativeLayout (百分比布局,百分比相对布局),这是谷歌官方出来的一个百分比布局
我们的鸿洋大神已经做了很好解释了,具体链接地址:点击打开链接
6.使用"wrap_content" and "match_parent",最好不要用固定大小
7.使用RelativeLayout 布局设计复杂的UI界面,禁用绝对布局
8.使用多套图片
在进行开发的时候,我们需要把合适大小的图片放在合适的文件夹里面
以图标设计为例
MDPI:480*320
HDPI:800*480
XHDPI:1280*720
XXHDPI:1920*1080
XXXHDPI:3840*2160
开发的时候尽量切多套图,放在对应的文件夹下(很重要,因为放不同文件夹下,虽然都能使用,但会导致内存占用情况差别很大)
假如现在有一张XXHDPI的图,也就是1920*1080的图,假如你将其放在HDPI中,它的占用内存将会是HDPI的两倍,具体是怎么计算的呢?
首先1920*1080的图在XXHDPI中的占用内存为:1920*1080*4(4为A,R,G,B四个颜色通道),而如果放在HDPI中,将会扩大两倍(3x/1.5x),就变成了(1920*2)*(1080*2)*4,这样一看内存的占用情况还是差别很大的,当然这只是针对于大图片,小图片(icon)在内存的占用情况很小可以忽略不计,当然如果公司有条件的话,还是建议每个文件夹都有相应的一套图,假如没条件,最起码那些大图,还是需要做几套图的。
注:
在中Menifest中添加子元素android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别加载
xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源.
9.低内存加载资源图片
在上面第8点说到不同的资源文件假如不放到对应的文件夹下会导致内存占用情况不一样。
但是我这里同样也总结了一些方法,可以做到即使是将图片放在不同的文件夹下,也是以最少的内存去加载本地的资源文件。
具体的文章地址请看:高效加载图片防止OOM-总结篇
10.鸿洋大神提供的百分比布局
内部是按照某个分辨率为基准进行计算,然后生成相应的values/dimens.xml文件夹,最终转换为px(方便计算)。
具体鸿神地址:Android屏幕适配方案
11.AutoLayout
这是鸿神自己总结出的一个适配框架,github:autoLayout,目前我现在的公司正在使用,大部分还行,内部的实现还是实现的是 百分比布局
具体使用方法这里不做说明,自行看鸿神博客:全新的适配框架—AutoLayout
12.使用.9图片
作用:图片可以根据UI控件的大小拉伸图片,便得图片中的文字或图片保持不变
图片格式要求为png
工具路径:AndroidSDK/tools/draw9patch
制作说明
1、左边和顶边是设置重复的区域
2、右边和底边是设置文本显示的区域
处理后的图片:xxx.9.png
平板适配一般布局是会改变的,会采用更多的Fragment来适配,所以平板适配重要的是编写多套layout布局文件,并在layout文 件夹后加上限定符,比如layout-sw-.....等
好了!这应该是我目前知道的全部适配方式了,大家如果还有什么其他的方式,可以在下面评论。
不喜勿喷!谢谢大家!