美文网首页
getDimension()\getDimensionPixel

getDimension()\getDimensionPixel

作者: 与猎犬赛跑的野兔 | 来源:发表于2017-08-11 19:15 被阅读0次

    在写自定义View的时候想获取dimen值的时候,有下面三个函数:

    • (float) getDimension(int index, float defValue)
    • (int) getDimensionPixelSize(int index, int defValue)
    • (int) getDimensionPixelOffset(int index, int defValue)

    看看API reference里的解释:

    • getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应的尺寸。文档里并没说这里返回的就是像素,要注意这个函数的返回值是float,像素肯定是int。
    • getDimensionPixelSize()与getDimension()功能类似,不同的是将结果转换为int,并且小数部分四舍五入。
    • getDimensionPixelOffset()与getDimension()功能类似,不同的是将结果转换为int,并且偏移转换(offset conversion,函数命名中的offset是这个意思)是直接截断小数位,即取整(其实就是把float强制转化为int)。

    测试代码:

    <resources>  
        <dimen name="dp_01">16dp</dimen>  
        <dimen name="px_01">16px</dimen>  
        <dimen name="sp_01">16sp</dimen>  
     </resources> 
    作者:亦枫
    链接:http://www.jianshu.com/p/9cdfc2f26a52
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    float a1=getResources().getDimension(R.dimen.dp_01);    
    int a2=getResources().getDimensionPixelOffset(R.dimen.dp_01);    
    int a3=getResources().getDimensionPixelSize(R.dimen.dp_01);    
    
    float b1=getResources().getDimension(R.dimen.px_01);  
    int b2=getResources().getDimensionPixelOffset(R.dimen.px_01);    
    int b3=getResources().getDimensionPixelSize(R.dimen.px_01);    
    
    float c1=getResources().getDimension(R.dimen.sp_01);    
    int c2=getResources().getDimensionPixelOffset(R.dimen.sp_01);    
    int c3=getResources().getDimensionPixelSize(R.dimen.sp_01);    
    
    Log.d("test", "getDimension= "+a1+", getDimensionPixelOffset="+a2+",getDimensionPixelSize="+a3);    
    Log.d("test", "getDimension= "+b1+", getDimensionPixelOffset="+b2+",getDimensionPixelSize="+b3);    
    Log.d("test", "getDimension= "+c1+", getDimensionPixelOffset="+c2+",getDimensionPixelSize="+c3);
    
    作者:亦枫
    链接:http://www.jianshu.com/p/9cdfc2f26a52
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    测试结果:

    //Device (480*800,240dpi,density=1.5):   
    getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24    
    getDimension= 16.0, getDimensionPixelOffset=16,getDimensionPixelSize=24    
    getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24
    
    作者:亦枫
    链接:http://www.jianshu.com/p/9cdfc2f26a52
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    补充:
    当利用上述的getDimension() 获取到数据后,如果用TextView/EditText.setTextSize()时需注意:

    • setTextSize(float size) {
      setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
      }
      即默认是使用sp数据,它和px之间涉及到转化。
    • setTextSize(int unit, float size)
      其中 unit = {TypedValue.COMPLEX_UNIT_SP,TypedValue.COMPLEX_UNIT_PX,TypedValue.COMPLEX_UNIT_DIP};
    /** 
         * 根据手机的分辨率从 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);  
        }  
    

    相关文章

      网友评论

          本文标题:getDimension()\getDimensionPixel

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