Android屏幕适配

2017-10-10  本文已影响0人  AFinalStone

一、使用密度无关像素

由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素(px)定义布局尺寸就会产生问题。
因此,请务必使用密度无关像素 dp 或独立比例像素 sp 单位指定尺寸。

1、dp与px的转换

因为ui给你的设计图是以px为单位的,Android开发则是使用dp作为单位的,那么该如何转换呢?

密度类型 代表的分辨率(px) 屏幕像素密度(dpi) 换算(px/dp) 比例
低密度(ldpi) 240x320 120 1dp=0.75px 3
中密度(mdpi) 320x480 160 1dp=1px 4
高密度(hdpi) 480x800 240 1dp=1.5px 6
超高密度(xhdpi) 720x1280 320 1dp=2px 8
超超高密度(xxhdpi) 1080x1920 480 1dp=3px 12

2、关于dp和sp需要注意的点

二、 图片资源的匹配

1. 把图片放置到xhdpi应该是首选

原因:

机型 分辨率(px) 屏幕尺寸(inch) 系统密度(dpi)
iPhone 5s 640X1164 4 332
iPhone 6 1334x750 4.7 326
iPhone 6 Plus 1080x1920 5 400

iPhone主流的屏幕dpi约等于320, 刚好属于xhdpi,所以选择xhdpi作为唯一一套dpi图片资源,可以让设计师不用专门为Android端切图,直接把iPhone的那一套切好的图片资源放入drawable-xhdpi文件夹里就好,这样大大减少的设计师的工作量!

2、关于图片需要注意的点

三、 动态布局计算

Paste_Image.png

1、如上图所示,我在项目中的做法是,用(屏幕的宽度(像素)-两边的间距-中间间距)/3,这样得到每个图片的宽度,然后图片的高度设置成高图片的宽度相等(当然也可以重写view,自动设置宽等于高)
代码如下:

LinearLayout.LayoutParams linearParams = LinearLayout.LayoutParams)pic.getLayoutParams(); 
linearParams.width =(context.getResources().getDisplayMetrics().widthPixels-DisplayUtil.dip2px(context, 44)) / 3; 
linearParams.height = linearParams.width; 
pic.setLayoutParams(linearParams); //使设置好的布局参数应用到控件

四、 权重的使用

上图展示的图片效果,weight也可以搞定了!可以用比重去做,三个图片各占比为1,再调整下边距,但是高度怎么办,前面说过上,可以重写view,让这个view的高跟宽度相等,这种方式也可以。

五、dimen尺寸资源文件的使用

dimen.xml在values文件夹下面

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="btn_width">16dp</dimen>
    <dimen name="btn_height">16dp</dimen>
</resources>

布局中使用:

<Button   
android:text="@string/test_dimen1"   
android:id="@+id/Button01"   
android:layout_width="@dimen/btn_width"   
android:layout_height="@dimen/btn_height"/>

文件夹含义: values-v11 ——-API 11+代表android 3.0 +,意思是在API11设备上,该目录下的dimens.xml代替res/values/dimens.xml values-480x320、values-800x480等 ————意思是在不同分辨率下,该目录下的dimens.xml代替res/values/dimens.xml


这里写图片描述
上一篇 下一篇

猜你喜欢

热点阅读