分割线的高度一般是1px,但是测量出来的值可能是0.33dp。所以,不能直接使用0.33dp,因为装换成int之后会导致分割线的高度为0.
使用X2C框架自动升层的代码中,计算0.33dp的代码如下:
(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,0.33f,getResources().getDisplayMetrics()))
在Pixel 3A上运行结果是: 0.9075
这是个float类型,不能直接复制给View的height,需要转换成int类型。转换如下:
(int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,0.33f,getResources().getDisplayMetrics()))
运行结果是:0
所以这导致分割线的高度为0。
正确的方式应该是:
Math.max(1, (int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0.33f, getResources().getDisplayMetrics())))
或者
(int)(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0.33f, getResources().getDisplayMetrics())+0.5f)
但是建议使用第一种方式,因为第二种如果前半部分是一个小于0.5f的数字,结果仍然是0.