【问题标题】:How to determine the Pixel Unit (px, dp, etc) of a View in Java?如何确定 Java 中视图的像素单位(px、dp 等)?
【发布时间】:2016-07-13 21:49:16
【问题描述】:
我正在尝试编写一个单元测试来验证是否使用了 DIP。我可以使用 editText.getTextSize() 读取大小值,但我无法读取文本单元(在这种情况下,它是为了确保“dp”的使用)。如果有人将文本单位从 dp 更改为 px 或任何其他单位,测试用例应该会失败。
<EditText
android:id="@+id/someId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="48dp"/>
提前致谢!
【问题讨论】:
标签:
java
android
unit-testing
android-studio
robolectric
【解决方案1】:
首先,永远不要在dp 中使用 textSize。他们应该始终使用sp,以便有视力问题的人可以根据需要扩大规模。
其次,您为什么要为此编写单元测试?你在测试什么?如果您将给定的大小放入实际使用的 xml 中?不要,这是谷歌在测试框架时测试的工作。为此编写单元测试完全是浪费时间,因为它永远不会中断。您是否正在测试某个元素是否具有特定大小?然后测试它,你不会测试它是否在dp 和px 中指定。
【解决方案2】:
已经有 lint 检查您没有使用 dp 作为文本大小的维度。它会产生警告,因此不会破坏构建。但是你可以严格要求失败:
lintOptions {
warningsAsErrors true
abortOnError true // Fail early.
}
@Gabe 的回答有一个很好的观点,即您可以通过 Android 框架测试副作用。如果您真的想保护特定元素的尺寸是具有特殊尺寸的特殊值,请为 xml 本身添加测试/lint 检查。
对我来说,它没有太多价值 - 它不会破坏功能,它增加了一致性和支持的复杂性,它增加了运行测试的时间。您也会通过回归测试注意到它,或者在值得的情况下,用户会抱怨它。
一个建议 - 关注样式和主题,不要复制粘贴文本大小和其他视图属性