Android - 将一个布局放置在另一个布局的顶部

时间:2017-02-18 10:30:54

标签: android layout view

我正在尝试将一个布局放在另一个布局之上。我能做到,但案件有问题。让我先描述一下: 这是我的布局代码:

<RelativeLayout>        
<LinearLayout
        android:id="@+id/smallVideoRenderLayoutOutgoing"
        android:layout_width="120dp"
        android:layout_height="170dp"
        android:orientation="vertical"/>

    <LinearLayout
        android:id="@+id/largeVideoRenderLayoutOutgoing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>
</RelativeLayout>

还有其他的东西,但这里没有必要。如果我用这两个视图运行代码工作正常。但是,如果我为&#34; smallVideoRenderLayoutOutgoing&#34;设置了可见性(GONE)。在我的Activity上的onCreate()或onResume()方法中。它根本不显示。虽然我可以看到那个&#34; smallVideoRenderLayoutOutgoing&#34;在我的程序上它显示它是可见的但我不能在我的屏幕上看到它。我认为它与&#34; largeVideoRenderLayoutOutgoing&#34;重叠。 。你怎么想?我怎么解决这件事?

完整视图heirarchy: My complete view heirarchy 这是我的代码部分:

    private LinearLayout smallVideoRenderLayoutOutgoing, largeVideoRenderLayoutOutgoing;
private VideoCallImageRenderView smallPlayerGLView, largePlayerGLView;

 private void initVideoRenderer() {
    Constants.debugLog(TEST_TAG, "initVideoRenderer");
    Constants.debugLog(TAG, "initVideoRenderer");
    smallPlayerGLView = new VideoCallImageRenderView(this);
    largePlayerGLView = new VideoCallImageRenderView(this);


    VideoCallCamera.getInstance().startCamera();
    VideoCallCamera.getInstance().cameraCallBack(largePlayerGLView, this);
    isOwnSurfaceViewLarge = true;

    largeVideoRenderLayoutOutgoing.addView(largePlayerGLView);
    largeVideoRenderLayoutOutgoing.setOnClickListener(this);

    smallVideoRenderLayoutOutgoing.addView(smallPlayerGLView);
    smallVideoRenderLayoutOutgoing.setOnClickListener(this);

    smallVideoRenderLayoutOutgoing.setVisibility(View.GONE);

}

2 个答案:

答案 0 :(得分:1)

尝试代替:

<RelativeLayout>        
    <LinearLayout
        android:id="@+id/smallVideoRenderLayoutOutgoing"
        android:layout_width="120dp"
        android:layout_height="170dp"
        android:orientation="vertical"/>

    <LinearLayout
        android:id="@+id/largeVideoRenderLayoutOutgoing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>
</RelativeLayout>

使用垂直方向的LinearLayout作为根布局。对于你的大型布局,高度为0dp,重量为1 - 它将使你的大型布局占据所有可用空间 - 并且它将在小布局下。 如下所示:

<LinearLayout
    android:orientation="vertical">        
    <LinearLayout
        android:id="@+id/smallVideoRenderLayoutOutgoing"
        android:layout_width="120dp"
        android:layout_height="170dp"
        android:orientation="vertical"/>

    <LinearLayout
        android:id="@+id/largeVideoRenderLayoutOutgoing"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical"/>
</RelativeLayout>

答案 1 :(得分:0)

尝试从匹配父级更改布局宽度和高度以包装内容。 或者,当您使视图不可见时,为另一个视图调用bringToFront()方法。 您应该查看this.