Android Studio 之像素

发布于:2024-05-06 ⋅ 阅读:(31) ⋅ 点赞:(0)
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);