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:
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!
Dies löste das gleiche Problem, das ich hatte, danke, aber ich habe keine Ahnung warum. Was macht 'appbar_scrolling_view_behavior' genau? – Micro
@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
@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