我有一个扩展LinearLayout
的类public MyLayout extends LinearLayout {
public MyLayout(Context context) {
super(context);
}
// Some override functions
@Override
public void ...
}
由于它是一个自定义类,我创建单元测试来验证其layout_weight,尽管没有任何覆盖函数可以修改它。
@Test
public void testWeight() {
View view_1 = new View(mContext);
view_1.setLayoutParams(new LayoutParams(mWidth_1, 0, mWeight_1));
// Attempt 5
view_1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Never get called
view_1.getHeight();
}
});
View view_2 = new View(mContext);
view_2.setLayoutParams(new LayoutParams(mWidth_2, 0, mWeight_2));
MyLayout myLayout = new MyLayout(mContext);
myLayout.setOrientation(LinearLayout.VERTICAL);
myLayout.addView(view_1);
myLayout.addView(view_2);
// Attempt 1
myLayout.onFinishInflate()
view_1.getHeight();
// Attempt 2
myLayout.layout(0, 0, 1080, 1920);
view_1.getHeight();
// Attempt 3
myLayout.draw(new Canvas());
view_1.getHeight();
// Attempt 4
myLayout.onWindowFocusChanged(true);
view_1.getHeight();
SystemClock.sleep(1000);
}
我知道view
可能不会在其生命周期的某个时刻被夸大,但我所做的所有尝试都返回0.在没有{的情况下获取视图维度的正确方法是什么{1}}?提前谢谢。
答案 0 :(得分:0)
回答我自己的问题。我找到的解决方法是创建一个Activity并添加我想要测试的自定义布局。然后使用ActivityTestRule
启动活动。
@Rule
public ActivityTestRule<MyTestActivity> mActivityRule = new ActivityTestRule<>(MyTestActivity.class);
在@Test
方法运行之前,视图将被充气并准备好进行测试。查看更多内容ActivityTestRule。