学习笔记7: 屏幕尺寸相关及 dp,px,sp间换算

本文介绍了Android屏幕的基本参数,包括屏幕大小、分辨率和PPI的概念,详细讲解了Android系统中不同屏幕密度的定义,并重点探讨了像素密度dp,以及在mdpi基准下dp与px的关系和不同屏幕密度下的比例。此外,还提供了单位转换的工具方法。

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

1.屏幕参数:

a.屏幕大小 - 如4.7寸屏幕  指的是手机对角线的长度(1寸 = 3.33cm)

b.分辨率 - 如 720 x 1280 就是屏幕分辨率  长和宽各有1280和720像素

c.PPI - Pixels Per Inch,DPI(Dots Per Inch),计算公式:PPI=√(长²+宽²)开方 ÷屏幕尺寸。 一般400PPI已经是非常高的屏幕密度了

未标题-1.jpg


2.android 系统定义的屏幕密度

密度ldpimdpihdpixhdpixxhdpi
密度值 120 160 240 320 480
分辨率 240x320 320x480 480x800 720x1280 1080x1920

QQ截图20151029145212.jpg

3.像素密度dp

当手机密度为mdpi时, 1dp = 1px

其它屏幕像素则可以通过比例得到  ldpi:mdpi:hdpi:xhdpi:xxhdpi = 3:4:6:8:12


4.单位转换的工具方法

java/utils/tools.java

package utils;

import android.content.Context;

/**
 * Created by Administrator on 2016/1/11.
 */
public class tools {
    /**
     * 将px值转换为dip或dp值,保证尺寸大小不变
     *
     * @param pxValue
     * @param scale
     *            (DisplayMetrics类中属性density)
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将dip或dp值转换为px值,保证尺寸大小不变
     *
     * @param dipValue
     * @param scale
     *            (DisplayMetrics类中属性density)
     * @return
     */
    public static int dip2px(Context context, float dipValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     *
     * @param pxValue
     * @param fontScale
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     *
     * @param spValue
     * @param fontScale
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值