Attualmente sto avendo un problema con un FrameLayout
in una CoordinatorLayout
dalla libreria di design-supporto Android, mentre ho seguito le istruzioni di questa post durante la creazione delle schede.Android SupportLib - FrameLayout in CoordinatorLayout con AppBarLayout consumare tutto lo schermo ad altezza
Fondamentalmente molte cose funzionare come previsto, il contenitore-frammenti vengono gonfiati in FrameLayout
e loro tab-frammenti sono correclty aggiunti ViewPager
come schede (necessario in questo modo perché ho avuto numerosi frammenti che dovrebbe riutilizzare il layout) .
Il problema che sto lottando con è che il FrameLayout
(e di conseguenza anche i tab-frammenti) consuma l'intero schermo-altezza in modo che si sovrappone alla Toolbar
e TabLayout
. Per visualizzare il problema ho creato la seguente immagine:
Base-Disposizione con CoordinatorLayout
, Toolbar
e 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>
formato distinto utilizzato dai frammenti gonfiati 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" />
Tutti i frammenti sono gonfiati dal mio BaseFragment
di classe (su un altro post su SO chiamando inflater.inflate(getLayoutRes(), null);
era il problema che causa lo stesso problema)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(getLayoutRes(), container, false);
}
Se si sostituisce la CoordinatorLayout
con un normale LinearLayout
le FrameLayout
inizia sotto il AppBarLayout
come previsto, ma come per il documentation il AppBarLayout
per la maggior parte delle sue caratteristiche richiede di essere un figlio diretto del CoordinatorLayout
.
Potrei semplicemente aggiungere un marginTop
allo FrameLayout
ma vorrei sapere se esiste una soluzione appropriata per questo. Grazie in anticipo per eventuali suggerimenti!
Questo ha risolto lo stesso problema che avevo, grazie, ma non ho idea del perché. Cosa fa appbar_scrolling_view_behavior' esattamente ...? – Micro
@MicroR - Suggerisco di leggere il Javadoc di [AppBarLayout.ScrollingViewBehavior [(http://developer.android.com/reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html) o guardando [la fonte codice] (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/AppBarLayout.java#1128) - aggiunge il richiesto padding per non sovrapporsi a 'AppBarLayout' e consentire a' AppBarLayout' di rispondere allo scrolling se messo su una vista scorrevole (come 'NestedScrollView' o' RecyclerView') – ianhanniballake
@ianhanniballake ho usato il tuo suggerimento ma il problema è im ottenere qualche spazio in più tra il mio tablayout e framelayout ho applicato bk color per analizzare il motivo ma nessun colore di sfondo appare nell'interfaccia utente – Erum