在Android代码中获取res资源dimens.xml
文件中定义的尺寸大小,可以通过如下三个方法:
• getDimension
•getDimensionPixelOffset
•getDimensionPixelSize
在资源中的定义:
<dimen name="dp_20">20dpdimen>
<dimen name="sp_20">20spdimen>
<dimen name="dp_20_4">20.4dpdimen>
<dimen name="dp_20_5">20.5dpdimen>
<dimen name="px_20">20pxdimen>
<dimen name="px_20_4">20.4pxdimen>
<dimen name="px_20_5">20.5pxdimen>
测试主要代码为,我的真机density为3:
Log.d(TAG, "--------获取的dimens.xml中的值为20dp的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20) + "");
Log.d(TAG, "--------获取的dimens.xml中的值为20sp的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.sp_20) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.sp_20) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.sp_20) + "");
Log.d(TAG, "--------获取的dimens.xml中的值为20.4dp的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20_4) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20_4) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20_4) + "");
Log.d(TAG, "--------获取的dimens.xml中的值为20.5dp的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.dp_20_5) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.dp_20_5) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.dp_20_5) + "");
Log.d(TAG, "--------获取的dimens.xml中的值为20.4px的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.px_20_4) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.px_20_4) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.px_20_4) + "");
Log.d(TAG, "--------获取的dimens.xml中的值为20.5px的情况-------------");
Log.d(TAG, "getDimension:"+getResources().getDimension(R.dimen.px_20_5) + "");
Log.d(TAG, "getDimensionPixelOffset:"+getResources().getDimensionPixelOffset(R.dimen.px_20_5) + "");
Log.d(TAG, "getDimensionPixelSize:"+getResources().getDimensionPixelSize(R.dimen.px_20_5) + "");
打印的结果为:
根据以上测试结果得出结论:
1.getDimension返回值为float型,getDimensionPixelOffset、getDimensionPixelSize为整型;
2.如果resources中dimen属性值的单位是dp或者sp,那么方法的返回值都为 :属性值*density,然后根据第4条不同的方法对(属性值*density)做了不同的处理;
3..如果resources中dimen属性值的单位是px的时候,那么方法的返回值都为:属性值,不需要再乘以density,然后根据第4条不同的方法对属性值做了不同的处理;
4.,getDimension返回值为准确值,getDimensionPixelOffset返回值为直接舍去小数位的整数,getDimensionPixelSize为四舍五入的整数;