Android 屏幕适配

Android 屏幕适配讲真的是贼恶心,虽然已经有很多大神写过怎么适配了,但是我还是想将我自己也是从网络上学习到的适配方案记录下来。首先是一些基本的概念
PPI = Pixels per inch,每英寸上的像素数,即 “像素密度”

xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75

drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分别为低、中(android默认)、高。
对应的图片大小为:36x36、48x48、72x72。
xxhdpi: 144144
xhdpi:96
96
hdpi:7272
mdpi:48
48
ldpi:3636
dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:
在320x480分辨率,像素密度为160,1dp=1px
在480x800分辨率,像素密度为240,1dp=1.5px
计算公式:1dp
像素密度/160 = 实际像素数

drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

ppi的运算方式是:

PPI = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数

dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,

dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

sp 与 px 的换算公式:sp*ppi/160 = px

ppi = 170 dp = 160px/ppi
总结得出:
px = dp
ppi/160
dp = px / (ppi / 160)

px = sp*ppi/160
sp = px / (ppi / 160)
显然这是需要计算的,因为我相信UI给的图还是以px为基准的。计算当然不会要我们一个一个按了,给出我看到的一个粗暴方法

public class Test01 {
    public static void main(String[] args) {
        int width = 1024;//屏幕宽度
        int height = 600;//屏幕高度
        float screenInch = 7.0f;//屏幕尺寸
        //设备密度公式
        float density = (float) Math.sqrt(width * width + height * height) / screenInch / 160;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n");
        for (int px = 100; px <=120; px++) {
            //像素值除以density
            String sp = px * 1.0f / density + "";
            if (sp.indexOf(".") + 4 < sp.length()) {
                sp = sp.substring(0, sp.indexOf(".") + 4);
            }
            stringBuilder.append("<dimen name=\"px").append(px + "").append("sp\">").append(sp).append("sp</dimen>\n");
        }
        stringBuilder.append("</resources>");
        System.out.println(stringBuilder.toString());
    }
}

这是换算sp的,你要换算成dp的话,就把代码里面的sp换成dp就好了生成的文件直接copy到你的项目里面放尺寸的文件里面就好了
展示部分效果就好了
在这里插入图片描述简单粗暴的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值