Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android layout 为什么在Robolectric中内容视图的高度和宽度为零?_Android Layout_Robolectric_Activity Lifecycle - Fatal编程技术网

Android layout 为什么在Robolectric中内容视图的高度和宽度为零?

Android layout 为什么在Robolectric中内容视图的高度和宽度为零?,android-layout,robolectric,activity-lifecycle,Android Layout,Robolectric,Activity Lifecycle,下面是一个失败的测试: @RunWith(RobolectricTestRunner.class) public class FailTest { @Test public void heightAndWidth_shouldNotBeZero() { TestActivity testActivity = Robolectric.buildActivity(TestActivity.class).create().resume().visible().get(

下面是一个失败的测试:

@RunWith(RobolectricTestRunner.class)
public class FailTest {

    @Test
    public void heightAndWidth_shouldNotBeZero() {
        TestActivity testActivity = Robolectric.buildActivity(TestActivity.class).create().resume().visible().get();
        View contentView = testActivity.findViewById(69);
        Assertions.assertThat(contentView.getWidth()).isNotZero();
        Assertions.assertThat(contentView.getHeight()).isNotZero();
    }

    private static class TestActivity extends Activity {
        @Override protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            LinearLayout contentView = new LinearLayout(this);
            contentView.setId(69);
            contentView.setLayoutParams(new LayoutParams(666, 666));
            setContentView(contentView);
        }
    }
}
如您所见,我正在调用
ActivityController
上的
visible()
方法,方法正确。引用文件:

等等,这是什么意思?

事实证明,在真正的Android应用程序中
活动
onCreate()之后的某个时间才会附加到
窗口
被称为。在此之前,活动的视图不会报告为 看得见的这意味着你不能点击它们(除其他意外之外) 行为)。“活动”的层次结构附加到“活动”上的窗口 在活动上的
onPostResume()
之后安装设备或模拟器。而不是 假设应在何时更新可见性, Robolectric在编写时将权力交给了开发人员 测试

那你什么时候叫它?当您与视图交互时 活动内部。像
Robolectric.clickOn()
这样的方法需要 视图可见并正确附着,以便正常工作。你 应该在
create()
之后调用
visible()


看来我正在做我需要做的一切。那么为什么我没有得到高度/宽度?

在Robolectric中没有布局过程,因此视图尺寸始终为零


可能不相关,但您缺少
start()