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

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

作者: 因为我的心 | 来源:发表于2020-07-28 18:38 被阅读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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/pvkqrktx.html