Android - 将一个布局放置在另一个布局之上

问题描述 投票:0回答:3

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

<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>

还有其他的东西,但这里不是必需的。如果我用这两个视图运行代码就可以正常工作。但是,如果我在 Activity 的 onCreate() 或 onResume() 方法中为“smallVideoRenderLayoutOutgoing”设置 Visibility(GONE) 。它根本不显示。虽然我可以在我的程序上看到“smallVideoRenderLayoutOutgoing”的可见性,并且它显示它是可见的,但我在屏幕上看不到它。我认为它与“largeVideoRenderLayoutOutgoing”重叠。您怎么看?我该如何解决这个问题?

完整的视图层次结构: 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);

}
android layout view
3个回答
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>

0
投票

尝试将布局宽度和高度从匹配父项更改为换行内容。 或者,当您使视图不可见时,请调用另一个视图的 BringToFront() 方法。 您应该检查这个。


0
投票

LinearLayout 可以,但是设置权重很重要...

对于一个 Linear,它使用两种布局,

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ff314859"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:id="@+id/logo"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="10"
    />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:orientation="vertical"
        android:layout_weight="20">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textSize="8dp"
            android:text="Bye World!"
            android:textColor="#ffffffff"
            android:layout_weight="1"
            android:gravity="center"
        />
    </LinearLayout>
</LinearLayout>

对于两个 Linears,它使用三种布局,

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ff314859"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:id="@+id/logo"
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:layout_weight="10"
    />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:orientation="vertical"
        android:layout_weight="20">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textSize="8dp"
            android:text="Hello World!"
            android:textColor="#ffffffff"
            android:layout_weight="10"
            android:gravity="center"
        />
</LinearLayout>
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0px"
        android:orientation="vertical"
        android:layout_weight="22">

        <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textSize="8dp"
            android:text="Exit"
            android:layout_weight="12"

            android:id="@+id/but_exit"
            
            android:background="#ffEFC802"
            android:textColor="#ffffffff"
            android:layout_weight="1"
            android:gravity="center"

        />
        
     </LinearLayout>
</LinearLayout>
© www.soinside.com 2019 - 2024. All rights reserved.