getDimension,getDimensionPixelOffset,getDimensionPixelSize

1.getDimension()是基于当前DisplayMetrics的density进行转换,获取指定资源id对应的尺寸。文档里并没说这里返回的就是像素,要注意这个函数的返回值是float,像素肯定是int。

2.getDimensionPixelSize()与getDimension()功能类似,不同的是将结果转换为int,并且小数部分四舍五入。

3.getDimensionPixelOffset()与getDimension()功能类似,不同的是将结果转换为int,并且偏移转换(offset conversion,函数命名中的offset是这个意思)是直接截断小数位,即取整(其实就是把float强制转化为int,注意不是四舍五入哦)。

<dimen name="dp_01">16dp</dimen>
    <dimen name="px_01">16px</dimen>
    <dimen name="sp_01">16sp</dimen>
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", "density= " + getResources().getDisplayMetrics().density);
		Log.d("test", "scaledDensity= " + getResources().getDisplayMetrics().scaledDensity);
		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);

有此可见这三个方法都是根据density将其他单位的数值转换成px的,getDimension返回的是单位是px的float,不对值进行任何处理, getDimensionPixelSize是将结果进行四舍五入,getDimensionPixelOffset是将结果直接截断小数位。

控件里面从xml中获取的dimens的大小都是通过getDimensionPixelSize来转换成px为单位的


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值