据我所知,在measure(0, 0)
上调用TextView
会导致视图将其测量的宽度和高度设置为当前字体/文字大小所需的最小值:
public class TextViewSizeTest extends AndroidTestCase {
public void testTextWidth() {
TextView view = new TextView(getContext());
view.setTextSize(42);
view.setText("test");
view.measure(0, 0);
assertEquals(212, view.getMeasuredWidth());
}
}
魔法数字212是正确的答案 - 测试通过。
但是android单元测试并不是很快 - 所以我尝试使用Robolectric。
@RunWith(RobolectricTestRunner.class)
public class TextViewSizeTest {
@Test
public void testTextWidth() {
TextView view = new TextView(Robolectric.application);
view.setTextSize(42);
view.setText("test");
view.measure(0, 0);
assertThat(view.getMeasuredWidth(), equalTo(212));
}
}
现在这个测试失败了:
java.lang.AssertionError:
Expected: <212>
but: was <0>
所以问题是 - 我是否在测试设置/初始化中遗漏了一些东西,或者在Robolectric中没有正确测量TextView大小的确存在问题?
答案 0 :(得分:2)
正确的答案是它没有在Robolectric中实现。然而。唯一相关的函数是Paint
的{{1}},只返回文本长度。看来我必须自己扩展Robolectric。