android屏幕适配

养成良好的开发习惯: 多用dp,sp,不用px; 多用线性布局和相对布局, 不用绝对布局; 代码中如果必须设置像素的话, 将dp转为px进行设置
这里写图片描述

图片适配

        手机分辨率   密度
ldpi:   240*320     0.75    高分辨率
mdpi:   320*240     1       低分辨率
hdpi:   480*800     1.5     中分辨率
xhdpi:  1280*720    2       超高分辨率
xxhdpi: 1920*1080   3       超超高分辨率

常规做法: 做一套图 1280*720 切图, 放在hdpi或xhdpi下. 如果某个屏幕出了问题, 再针对该屏幕, 对相关出问题的图片进行替换.

布局适配

在res下创建对应的分辨率文件夹然后再写对应的xml布局(注意:xml文件名不能变)

layout-800x480:专门针对480*800屏幕适配的布局文件, 一般只调整位置和大小, 不建议对控件类型和个数进行调整

尺寸适配 (常用)

在布局文件中使用dp为什么不使用px。因为px是像素,而dp是根据不同的手机屏幕分辨率和密度来计算出来的数值。

//dp 和 px的关系
//dp = px/设备密度
//实际显示的px=dp*设备密度

获取当前手机屏幕设备密度:
getResources().getDisplayMetrics().density

//values-1280x720/dimens.xml
在一些手机上横屏过来也可能显示的不一样,可以在res下创建values-对应的分辨率,然后创建dimens.xml。最后在布局文件中使用@dimens/XXX     

权重适配

 android:weightSum=" "总共分成几份
 android:weight=" "   控件占几份

代码适配

在一些java代码中有可能要对控件的宽度高度或者边距进行设置,而进行设置的时候需要的是一个px。所以这样在不同的手机屏幕上会出现不同的效果。所以需要用代码进行适配,在对控件进行操作的时候使用工具类来把dp转换成px 

获取当前手机屏幕设备密度:
getResources().getDisplayMetrics().density
public class DensityUtils {
    //dp转换成px
    public static int dip2px(float dip, Context ctx) {
        float density = ctx.getResources().getDisplayMetrics().density;
        int px = (int) (dip * density + 0.5f);// 4.9->4, 4.1->4, 四舍五入
        return px;
    }

    //px转换成dp
    public static float px2dip(int px, Context ctx) {
        float density = ctx.getResources().getDisplayMetrics().density;
        float dp = px / density;
        return dp;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值