23

ich zur Zeit mit einem FrameLayout in einem CoordinatorLayout von Android Design-Support-Bibliothek ein Problem habe, während ich die Anweisungen aus dieser post gefolgt, während die Registerkarten zu schaffen.Android SupportLib - FrameLayout in CoordinatorLayout mit AppBarLayout gesamten Bildschirm-Höhe raubend

Grundsätzlich meisten Dinge wie erwartet, werden die Container-Fragmente in den aufgeblasenen FrameLayout und ihre Reiter-Fragmente werden Correclty zum ViewPager als Registerkarten (müssen es auf diese Weise, weil ich zahlreiche Fragmente haben, die das Layout wieder verwenden sollte) hinzugefügt .

Das Problem mit der ich zu kämpfen ist, dass die FrameLayout (und als Folge auch die Tabula Fragmente), um die gesamte Bildschirm-Höhe verbraucht, so dass es die Toolbar und die TabLayout überlappt. Um das Problem zu visualisieren Ich habe folgendes Bild erstellt:

Visualized issue

Basis-Plan mit CoordinatorLayout, Toolbar und TabLayout:

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBarLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

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

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </android.support.design.widget.AppBarLayout> 

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

</android.support.design.widget.CoordinatorLayout> 

Separate Layout durch die Fragmente verwendet aufgeblasen in container:

<android.support.v4.view.ViewPager 
    android:id="@+id/viewPager" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

Alle Fragmente werden durch meine BaseFragment -Klasse (auf einem anderen Beitrag inflater.inflate(getLayoutRes(), null); auf SO ruft das Problem war das gleiche Problem verursacht) aufgeblasen

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(getLayoutRes(), container, false); 
} 

Wenn ich die CoordinatorLayout mit einem normalen LinearLayout den FrameLayout beginnt unterhalb der AppBarLayout ersetzen Wie erwartet, aber gemäß der documentation die AppBarLayout für die meisten seiner Funktionen erfordert, ein direktes Kind der CoordinatorLayout sein.

Ich könnte nur eine marginTop zu der FrameLayout hinzufügen, aber ich würde gerne wissen, ob es eine geeignete Lösung dafür gibt. Vielen Dank im Voraus für Hinweise!

Antwort

34

Verschieben Sie Ihre app:layout_behavior="@string/appbar_scrolling_view_behavior" an die FrameLayout - dieses Attribut muss auf dem direkten Kind der CoordinatorLayout sein.

+0

Dies löste das gleiche Problem, das ich hatte, danke, aber ich habe keine Ahnung warum. Was macht 'appbar_scrolling_view_behavior' genau? – Micro

+1

@MicroR - Ich würde vorschlagen, das Javadoc von [AppBarLayout.ScrollingViewBehavior [(http://developer.android.com/reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html) zu lesen oder [die Quelle anzusehen Code] (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/AppBarLayout.java#1128) - es fügt die erforderlichen hinzu Padding, um das 'AppBarLayout' nicht zu überlappen und das' AppBarLayout' zu erlauben, auf Scrollen zu antworten, wenn es auf eine scrollbare Ansicht gesetzt wird (zB 'NestedScrollView' oder' RecyclerView') – ianhanniballake

+0

@ianhanniballake Ich habe unseren Vorschlag benutzt, aber es gibt Probleme etwas zusätzlichen Platz zwischen meinem Tablayout und framelayout Ich habe bk Farbe verwendet, um den Grund zu analysieren, aber keine Hintergrundfarbe erscheint in UI – Erum

Verwandte Themen