2017-02-18 18 views
0

Я пытаюсь разместить один макет в верхней части другого. Я могу это сделать, но есть проблема в случае. Позвольте мне описать первый: Вот мои коды макета:Android - Размещение одного макета поверх другого макета

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

Есть и другие вещи, но они не нужны здесь. Если я запускаю код с этими двумя представлениями, отлично. Но если я устанавливаюVisibility (GONE) для «smallVideoRenderLayoutOutgoing» в моем методе onCreate() или onResume() в моей Activity. Это совсем не видно. Хотя я вижу видимость этого «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); 

} 
+1

вы установили 'layout_height = match_parent' для второго макета .. – akash93

+0

мне нужно, чтобы показать вторую раскладку на весь экран, так что я установить это. В чем проблема? –

+0

Если 2-й макет занимает весь экран, то, естественно, первый будет перекрываться им – akash93

ответ

0

Попробуйте изменить ширину макета и высоту от спичечного родителя, чтобы обернуть содержание. Или когда вы делаете вид невидимым вызовом метода bringToFront() для другого представления. Вы должны проверить this.

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

На самом деле mylayout более сложный и многоуровневый. Я отправляю свой взгляд на иерархию. –

+0

см. Мое новое редактирование, пожалуйста. Я добавил здесь свою детскую иерархию. –