Android屏幕相关知识(一)

本文详细介绍了Android手机屏幕的基本参数,包括屏幕大小、分辨率及PPI等概念,并深入探讨了系统屏幕密度及其对屏幕显示的影响。同时,文章还提供了px、dp与sp之间的单位转换方法,帮助开发者更好地进行屏幕适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Android手机屏幕的分辨率和尺寸大小不一,千奇百怪,这在我们自定义view以及做屏幕适配的时候造成了一定的困难,要想高效的解决遇到的问题,需要我们毒地手机屏幕有一定的认识。

2.屏幕参数

1.屏幕大小:

指的是屏幕对角线的长度,用“寸”来表示,比如我们所说的4.7寸,5.5寸的手机。

2.分辨率:

指的是手机屏幕的像素点个数,例如720x1080就是指的屏幕的分辨率,指的是宽有720个像素点,高有1080个像素点。

3.PPI

每英寸像素(Pixels Per Inch),也叫作DPI(Dots Per Inch).它是有对角线的像素点个数除以屏幕的大小得到的。

3.系统屏幕密度

每个厂商的Android手机具有不同的大小尺寸和像素密度的屏幕。Android系统如果要精确到每种DPI的屏幕,那基本上是不可能的,所以系统定义了几个标准的DPI值,作为手机的固定DPI.如下所示:
这里写图片描述

4. 独立像素密度dp

正是各种屏幕的密度不同,导致同样大小的长度,在不同密度的屏幕上显示的长度不同,因为相同长度的屏幕,高密度的屏幕包含有更多的像素点。Android系统使用mdpi即密度值为160的屏幕作为标准。在这时候1px = 1dp。其他屏幕则要通过比例换算。例如同样是100dp的长度,在mdpi中为100px,而在hdpi中为150px。所以我们也可以得出各个密度值的换算公式。
在mdpi中1dp = 1px,
在hdpi中1dp = 1.5px,
在xhdpi中1dp = 2px,
在xxhdpi中1dp = 3px。

5.px与sp,dip之间单位的转换

 /**
     * 将px值转化成dip值,保证尺寸大小不变
     * @param context
     * @param pxValues  px值
     * @return
     */
    public static int px2dip(Context context, float pxValues) {
        // 获取当前屏幕显示的密度值
        float density = context.getResources().getDisplayMetrics().density;
        return (int) (pxValues / density + 0.5f);   // 加0.5f四舍五入

    }

    /**
     * 将dip值转化成px值,保证尺寸大小不变
     * @param context
     * @param dipValues dip值
     * @return
     */
    public static int dip2px(Context context, float dipValues) {
        // 获取当前屏幕显示的密度值
        float density = context.getResources().getDisplayMetrics().density;
        return (int) (dipValues *  density + 0.5f);   // 加0.5f四舍五入

    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     * @param context
     * @param pxValues
     * @return
     */
    public static int px2sp(Context context, float pxValues) {
        // 获取当前字体显示的密度值
        float fontDensity = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValues /  fontDensity + 0.5f);   // 加0.5f四舍五入

    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     * @param context
     * @param spValues
     * @return
     */
    public static int sp2px(Context context, float spValues) {
        // 获取当前字体显示的密度值
        float fontDensity = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValues *  fontDensity + 0.5f);   // 加0.5f四舍五入

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值