Android开发在使用代码设置尺寸时为什么单位是px而不是dp

2020-07-28  本文已影响0人  因为我的心

一、前言:

比如layoutParams、measuredHeight等等为什么单位是px,按理说应该统一用dp更合理啊,毕竟不同设备的px意义差别太大了。

主要是Canvas的问题:

1、dp和px实际上存在转换比,这个跟屏幕实际尺寸、分辨率的像素密度有关。
2、Android在使用Java构建代码时,实际View底层绘制大部分依赖Canvas,而Canvas是以px为单位的。
3、统一是有好处的,但实际上px提供了真正在屏幕上点对点的尺寸单位,而dp并一定能精确到每个像素点,就好比列表常用的分割线举例,一般的设计稿都是1px而不是dp,因为此时的dp无法量化一个非常细的分割线。
4、Java代码中并不支持自定义的 “单位” 因此无法像XML中随意选择px还是dp,只能使用最精确的单位,即px。
5、实际上XML中设置的值也会在从AttributeSet中取出时被转换为精确值(px)然后在onDraw中绘制在屏幕上的,这个转换过程一般是由Attr代劳。

    /**
     * 根据手机的分辨率从 dip 的单位 转成为 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);
    }

参考:https://www.zhihu.com/question/395003320

上一篇 下一篇

猜你喜欢

热点阅读