getDimension()、getDimensionPixelSize()和getDimensionPixelOffset()的区别

本文详细介绍了在Android开发中如何通过不同方法从dimens.xml文件中获取尺寸资源,并对比了这些方法在处理dp、sp及px单位时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在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: --------获取的dimens.xml中的值为20dp的情况-------------
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为四舍五入的整数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值