2013-05-27 3 views
0

J'ai deux mises en page une qui va juste être un arrière-plan et une autre qui va être au centre d'une prise autour de la moitié de l'écran. J'ai le code que je pensais faire, mais la vue que j'inclus prend tout l'écran lorsque l'application fonctionne et je ne comprends pas pourquoi cela se produit.FrameLayout inside RelativeLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<include 
    android:layout_width="500dp" 
    android:layout_height="500dp" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    layout="@layout/activity_main" /> 

</RelativeLayout> 

seconde xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#00000000" > 

<FrameLayout 
    android:id="@+id/frmPreview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" > 
</FrameLayout> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="left" 
    android:gravity="center_vertical" 
    android:orientation="vertical" > 
</LinearLayout> 

<ImageView 
    android:id="@+id/imgShoot" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="bottom|center" 
    android:background="@drawable/aperture_closing" /> 

+0

sur quel périphérique testez-vous ce code? – TheFlash

Répondre

0

Essayez d'utiliser des poids.

android:layout_weight="1" 
0

Vous ne pouvez spécifier aucun attribut autre que layout sur l'étiquette <include>, car il sera remplacé entièrement par l'élément racine de la mise en page vous incluez et ils seront supprimés. En outre, vous n'avez pas besoin de RelativeLayout pour centrer un enfant. Il est préférable d'utiliser un FrameLayout pour des raisons de performances.

Parent:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include layout="@layout/activity_main" /> 

</RelativeLayout> 

Enfants:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="500dp" 
    android:layout_height="500dp" 
    android:layout_gravity="center" 
    android:background="#00000000"> 

    <FrameLayout 
    android:id="@+id/frmPreview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center"> 
    </FrameLayout> 

    <LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="left" 
    android:gravity="center_vertical" 
    android:orientation="vertical"> 
    </LinearLayout> 

    <ImageView 
    android:id="@+id/imgShoot" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="bottom|center" 
    android:background="@drawable/aperture_closing"/> 

</FrameLayout> 

Notez que si le parent FrameLayout ne contient aucune vue autre que l'étiquette <include>, vous pouvez sauter le parent mise en page et utilisez simplement la mise en page des enfants directement. Chaque activité a déjà un FrameLayout à sa racine.