2016-03-30 11 views
0

HintergrundZ-Ordnung des Kindes sieht in Bezug auf ihre Eltern

In meiner app ich viele Fragmente, die die gleiche statische Overlay teilen. Jedes Fragment kann dynamisch in der Größe verändert werden (d. H. Sein Gewicht kann sich ändern), daher möchte ich, dass die Größe meines Overlays damit übereinstimmt. Daher macht es Sinn, sie entweder zu Geschwistern zu machen oder, wie mir einfiel, ineinander zu stecken. Der erste Ansatz funktioniert gut, aber es beinhaltet eine zusätzliche ViewGroup, die redundant erscheint (oder nicht?). Letzteres ist der, mit dem ich Probleme habe.

Problem

Betrachten Sie diese zwei Layouts.

Container R.id.container ist, wo ich mein Fragment in Laufzeit mit FragmentManager. Fragment R.id.overlay ist mein Overlay.

Der Unterschied ist, welcher der Eltern ist.

Layout A.

<FrameLayout 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment class="com.example.OverlayFragment" 
     android:id="@+id/overlay" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</FrameLayout> 

Layout B.

<fragment class="com.example.OverlayFragment" 
    android:id="@+id/overlay" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</fragment> 

In beiden Fällen meine overlay unter Behälter (durch z-Achse) endet. Das heißt, der Container überlappt ihn immer, unabhängig von seiner Rolle in der Hierarchie.

Welche Regeln gelten für die Definition der Z-Reihenfolge von Sichten in Situationen wie dieser? Ist es nur die Reihenfolge ihrer Initialisierung? Ich konnte es nicht googlen.

Danke.

Antwort

1

Von documentation:

Wenn das System diese Aktivität Layout erstellt, es instanziiert jedes Fragment in das Layout festgelegt und ruft die onCreateView() -Methode für jeden, jedes Fragment Layout abzurufen. Das System fügt die von dem Fragment zurückgegebene Ansicht direkt anstelle des Elements ein.

So denke ich, Sie so etwas wie diese verwenden sollten:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <fragment class="com.example.OverlayFragment" 
     android:id="@+id/overlay" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</FrameLayout> 
+0

Ja, danke, das ist, was ich tat schließlich. Dennoch ist es mir ziemlich unklar, was mit "direkt an Stelle des Elements" gemeint ist, wenn das Element als Ansichtsgruppe dient. – SqueezyMo

+0

Das System ersetzt die Ansicht, die Sie in 'onCreateView' anstelle von' fragment'tag in der XML-Datei zurückgeben. Zum Beispiel, wenn die Root-Ansicht Ihres Fragments linearlayout ist, dann mag es Sie, dass Sie das Fragment-Tag in der XML-Datei entfernen und dann linearlayout hinzufügen. Es ist wie '@ include' in Layouts. –

+0

Ich verstehe das. Aber was ist, wenn ein "Fragment" verschachtelte Ansichten hat, wie in Layout B? Werden diese Views an das 'LinearLayout' angehängt, das von' onCreateView() 'zurückgegeben wird? – SqueezyMo

Verwandte Themen