Android Studio 之像素

本文详细解释了Android中常用的像素单位(px、dp、sp)的区别,包括它们与物理设备的关系、系统设置的适应性以及在XML布局和代码中的转换。重点介绍了如何在不同场景下正确运用这些单位以实现跨设备的统一显示效果。
摘要由CSDN通过智能技术生成
Android支持的像素单位有:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小)。

其中,常用的有px、dp和sp三种。

具体来说,px是手机屏幕上可显示的最小单位,与物理设备的显示屏有关。一般来说,同样尺寸的屏幕(比如5寸的手机)看起来越清晰,像素的密度越高,以px计量的分辨率也越大。

dp与物理设备无关,只与屏幕的尺寸有关。一般来说,同样尺寸的屏幕以dp计量的分辨率是一样的,无论这个手机是哪个厂家生产的,dp大小都一样。

sp的原理跟dp差不多,专门用于设置字体大小。手机在系统设置里可以调整字体的大小(小、普通、大、超大)。

设置普通字体时,同数值dp和sp的文字看起来一样大;如果设置为大字体,用dp设置的文字没有变化,用sp设置的文字就变大了。

所以说,dp与系统设置的字体大小没有关系,而sp会随系统设置的字体大小变大或变小。

dp和px之间的联系取决于具体设备上的像素密度,像素密度就是DisplayMetrics里的density参数。

  当density=1.0时,表示一个dp值对应一个px值
  当density=1.5时,表示两个dp值对应3个px值
  当density=2.0时,表示一个dp值对应两个px值

具体的转换函数如下:
    // 根据手机的分辨率从dp的单位转成px(像素)
    public static int dip2px(Context context, float dpValue){
        // 获取当前手机的像素密度
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dpValue*scale + 0.5f) // 四舍五入取整
    }

    // 根据手机的分辨率从px(像素)的单位转成为dp
    public static int px2dip(Context context, float pxValue){
        // 获取当前手机的像素
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(pxValue / scale + 0.5f); // 四舍五入取整
    }
在XML布局文件中,为了让不同设备屏幕拥有统一的显示效果,除了sp用于设置文字大小外,其余要用尺寸大小的地方都用dp。

在代码中情况又有所不同,Android用于设置大小的函数都以px为单位。

无论是LayoutParams里的width和height,还是setMargins和setPadding,参数单位都是px,要想在代码中使用dp设置

布局大小或间距,得先把dp值转换成px值。

代码示例如下:
 // 将10dp的尺寸大小转换为对应的px数值
    int dip_10 = Utils.dip2px(this, 10L);
    // 从布局文件中获取名叫tv_padding的文本视图
    TextView tv_padding = findViewById(R.id.tv_padding);
    // 设置该文本视图的内部文字与控件四周的间隔大小
    tv_padding.setPadding(dip_10, dip_10, dip_10, dip_10);

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东成2022

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值