简单介绍屏幕适配(三种常用方案)
1、(px):
含义:通常所说的像素,就是ccd/cmos上光电感应元件的数量,一个感光元件经过感光,光电信号转换,a/d转换等步骤以后,在输出的照片上就形成一个点,我们如果把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”(pixel)。简而言之,像素就是手机屏幕的最小构成单元。
单位:px(pixel),1px = 1像素点 一般情况下ui设计师的设计图会以px作为统一的计量单位。
2、分辨率:
含义:手机在横向、纵向上的像素点数总和 一般描述成 宽*高 ,即横向像素点个数 * 纵向像素点个数(如1080 x 1920)。
单位:px(pixel),1px = 1像素点
3、屏幕尺寸(in):
含义:手机对角线的物理尺寸
单位 英寸(inch),一英寸大约2.54cm 常见的尺寸有4.7寸、5寸、5.5寸、6寸
4、屏幕像素密度(dpi):
含义:每英寸的像素点数。 例如每英寸内有160个像素点,则其像素密度为160dpi。
单位:dpi(dots per inch)
计算公式: 像素密度 = 像素 / 尺寸 (dpi = px / in)
标准屏幕像素密度(mdpi): 每英寸长度上还有160个像素点(160dpi),即称为标准屏幕像素密度(mdpi)
密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算(px/dp) 比例 图片px
低密度(ldpi) 240x320 120 1dp=0.75px 3 3636
中密度(mdpi) 320x480 160 1dp=1px 4 4848
高密度(hdpi) 480x800 240 1dp=1.5px 6 7272
超高密度(xhdpi) 720x1280 320 1dp=2px 8 9696
超超高密度(xxhdpi) 1080x1920 480 1dp=3px 12 144*144
一.autolayout 用法 鸿洋地址 https://blog.csdn.net/qq_37237245/article/details/78134010
1、将autolayout引入
dependencies {
compile project(’:autolayout’)
}
也可以直接
dependencies {
compile ‘com.zhy:autolayout:1.4.5’
}
2、标明设计稿尺寸
在androidmanifest
3、使用时候有两种用法:
一种是让你的activity继承自autolayoutactivity.一般可以把你的基类继承autolayoutactivity
如果你觉得这种对你的activity改变太大等等,,,
那么,你可以将你的布局替换成
linearlayout -> autolinearlayout
relativelayout -> autorelativelayout
framelayout -> autoframelayout
系统原有的属性都会保留。
ps:几个注意事项
1、可以多用margin,减少嵌套,因为不需要考虑适配问题,所以,可以直接margin固定距离尺寸等等,
linearlayout的weight也不需要,直接每个布局设置相同宽度即可。
2、textview使用中发现很多问题,直接用px会出现高度不对问题。鸿洋这样解释:设计稿一般只会标识一个字体的大小
,比如你设置textsize=”20px”,实际上textview所占据的高度肯定大于20px,字的上下都会有一定的间隙,所以一定要
灵活去写字体的高度,比如对于text上下的margin可以选择尽可能小一点。或者选择别的约束条件去定位(比如上例,选
择了marginbottom)
但是更简单的处理方式是,我们的字体尺寸可以继续用sp.
3、在listview ,recycleview 或者一些布局我们无法转换为autoxxx的布局,我们想为子布局做适配的时候,我们需要
用到同一个方法, autoutils.autosize(convertview);我们可以实例化出来子布局,然后设置适配,那么这个子布局将
会适配auto布局。
对于listview
对于listview这类控件的item,默认根局部写“px”进行适配是无效的,因为外层非autoxxxlayout,而是listview。但
是,不用怕,一行代码就可以支持了:
@override
public view getview(int position, view convertview, viewgroup parent){
viewholder holder = null;
if (convertview == null){
holder = new viewholder();
convertview = layoutinflater.from(mcontext).inflate(r.layout.list_item, parent, false);
convertview.settag(holder);
//对于listview,注意添加这一行,即可在item上使用高度
autoutils.autosize(convertview);
} else{
holder = (viewholder) convertview.gettag();
}
感谢分享
三克油
感谢分享
感谢分享
感谢分享
感谢分享
感谢分享
感谢分享
感谢分享