【发布时间】:2019-09-24 09:08:37
【问题描述】:
我有一个想要测试的 android customView。
当 N 是 subView 高度时,很少有测试会模拟 N dps 的滚动。
我使用 robolectric 运行测试,但我总是在运行时得到 subView.getHeight() == 0
这是因为 subView 的高度定义为 wrap_content,我猜 robolectric 不会膨胀所有视图来获得准确的信息。
例如,subView.getWidth > 0 定义为match parent。
这是我的测试@before 方法:
@Before
public void setUp() {
myView.getHeaderView().getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myHeight =
myView.getHeaderView().getHeight();
}
});
activityScenarioRule
.getScenario()
.onActivity(activity -> activity.setContentView(myView));
activityScenarioRule.getScenario().moveToState(State.RESUMED);
}
我怎样才能在测试运行时仍然获得包装内容高度?
代码确实调用了onGlobalLayout,但返回了height==0
【问题讨论】:
-
尝试在您的 SubView 上调用 measure() 和 layout(),和/或在 SubView 上设置 ViewTreeObserver.OnGlobalLayoutListener 并从那里获得视图尺寸
-
不是自动调用的吗?你的意思是从产品代码调用?
-
您可能获得子视图的高度太快,这是它返回 0 的原因,如果在产品代码上您在视图准备好之前获取视图尺寸,最好使用它一个 ViewTreeObserver.OnGlobalLayoutListener 所以你确定视图已经调用了它的方法,你可以暂时在测试代码上测试它,看看它是否工作
-
但是为什么我会得到视图的高度呢?
-
在测试
@before注册到ViewTreeObserver.OnGlobalLayoutListener没有解决
标签: android layout view robolectric layout-inflater