一:图片的适配:
1、图片的自适配:1)明确哪些资源文件在不同分辨率的设备存在显示问题(图片上带文字-->底图和文字分开给(文字用textview),图片上带图标-->图标和底图分开给(2张图))。2)学会使用9-patch,一般提供hdpi大小的图片,并制作为9-patch格式,此时的拉伸在mdpi、ldpi上基本都不会带来问题。
2、对不同密度的屏幕提供不同的图片,把图片资源放在新建的不同文件夹下:
Android有个自动匹配机制去选择对应的布局和图片资源。系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。需要在AndroidManifest.xml里面添加下面一段,没有这一段自适应就不能实现:
</application>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:anyDensity = "true"/>
</manifest>
不指定精准分辨率
屏幕密度区分
drawable-ldpi低分辨率的图片,如QVGA (240x320)
drawable-mdpi中等分辨率的图片,如HVGA (320x480)
drawable-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
drawable-xdpi至少960dp x 720dp
o
屏幕总像素区分
drawable-small(屏幕尺寸小于3英寸左右的布局)
drawable-normal(屏幕尺寸小于4.5英寸左右)
drawable-large(4英寸-7英寸之间)
drawable-xlarge(7-10英寸之间)
指定精准分辨率
列表
drawable-hdpi-960x540
drawable-hdpi-854x480
drawable-hdpi-800x480
drawable-mdpi-480x320
drawable-ldpi-320x240
注意:
a. 较大的数字要写在前面:比如drawable-854x480而不能写drawable-480x854.
b. 两个数字之前是小写字母x,而不是乘号。
二、Layout布局适配
1、 Layout自适配:layout文件中布局控件的选用 Linearlayout layout_weight 属性活用,分配个别子控件的权重。这个属性分配一个“重要性”给子控件,并允许它扩大填补在父视图剩余的空间。子视图可以指定一个整数的重量值,然后视图中的任何剩余的空间组的比例分配给子控件。默认的权重为零
linearLayout中包含有weight的child时,linearLayout会measure两次:
在layout_width設置為fill_parent的時候,layout_weight所代表的是你的控件要優先盡可能的大,但這個大是有限度的,即fill_parent. 在layout_width設置為wrap_content的時候,layout_weight所代表的是你的控件要優先盡可能的小,但這個小是有限度的,即wrap_content.
2、对不同大小的屏幕提供不同的layout
不指定精准分辨率
屏幕密度区分
layout-ldpi低分辨率的图片,如QVGA (240x320)
layout-mdpi中等分辨率的图片,如HVGA (320x480)
layout-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
layout-xdpi至少960dp x 720dp
屏幕总像素区分
layout-small(屏幕尺寸小于3英寸左右的布局)
layout-normal(屏幕尺寸小于4.5英寸左右)
layout-large(4英寸-7英寸之间)
layout-xlarge(7-10英寸之间)
指定精准分辨率
列表
layout-hdpi-960x540
layout-hdpi-854x480
layout-hdpi-800x480
layout-mdpi-480x320
layout-ldpi-320x240
注意:
a. 较大的数字要写在前面:比如layout-854x480而不能写layout-480x854.
b. 两个数字之前是小写字母x,而不是乘号。
三、 对不同大小的屏幕提供不同的常用单位大小(values)
1、对不同分辨率提供不同的尺寸资源文件
不指定精准分辨率
屏幕密度区分
values-ldpi低分辨率的图片,如QVGA (240x320)
values-mdpi中等分辨率的图片,如HVGA (320x480)
values-hdpi高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
values-xdpi至少960dp x 720dp
屏幕总像素区分
values--small(屏幕尺寸小于3英寸左右的布局)
values--normal(屏幕尺寸小于4.5英寸左右)
values--large(4英寸-7英寸之间)
values--xlarge(7-10英寸之间)
指定精准分辨率
列表
values-hdpi-960x540
values-hdpi-854x480
values-hdpi-800x480
values-mdpi-480x320
values-ldpi-320x240
注意:
a. 较大的数字要写在前面:比如drawable-854x480而不能写drawable-480x854.
b. 两个数字之前是小写字母x,而不是乘号。
2、单位介绍
pix:像素
ppi:每英寸所拥有的像素(Pixel)数目
PPI = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数
sp:放大像素(主要用于字体),保证相同字号的字在不同PPI屏幕上显示的物理高度一致。
设定 PPI为 267 时,高度18sp(即 30px)的字的物理高度为 X,则: 一英寸里的像素数 267 / 一英寸里的毫米数 25.4mm = 30 / X X ≈ 2.86mm
设定 PPI为 160 时,高度18sp(即 18px)的字的物理高度为 Y,则: 一英寸里的像素数 160 / 一英寸里的毫米数 25.4mm = 18 / Y Y ≈ 2.86mm
dp:设备独立像素,dip * density / 160,则当屏幕密度为160时,px = dip
3、在创建的列表文件夹中分别创建dimens.xml <dimen name="Text_size">30sp</dimen>
四、获取屏幕px
screenWidth = getWindowManager().getDefaultDisplay().getWidth();
screenHeight = getWindowManager().getDefaultDisplay().getHeight();
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;