【android】使用getDimension().toInt()的一点点坑

【android】使用getDimension().toInt()的一点点坑

在改UI时发现之前的代码的问题。


问题描述

代码中使用getDimension获取margin,然后用MarginLayoutParamsCompat.setMargin(lp, margin.toInt())设置margin,导致该控件显示的像素在不同机型上可能与xml文件中其他控件有2px的差距。


原因分析:

参考:【android】getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解

在自定义控件中使用自定义属性时,经常需要使用java代码获取在xml中定义的尺寸,相关有以下三个函数

  • getDimension()
  • getDimensionPixelOffset()
  • getDimensionPixelSize()

(在类TypedArray和类Resources中都有这三个函数,功能类似,TypedArray中的函数是获取自定义属性的,Resources中的函数是获取android预置属性的)

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

解决方案:

很简单的哦

因为toInt()是直接截断小数位,先getDimensiontoInt()相当于getDimensionPixelOffset(),不准确。
直接用getDimensionPixelSize()即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值