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