2015-07-15 9 views
9

Dai un'occhiata al seguente layout. Vedrai che il pulsante fluttuante è troppo lontano verso il basso. Questo perché la barra degli strumenti e le schede sono mostrate e l'altezza di ViewPager è errata. Quindi in qualche modo sto facendo qualcosa di sbagliato con il layout_height. Ma come posso aggiustarlo?CoordinatorLayout che si sovrappone

Nota: ViewPager è il contenuto principale e contiene un frammento con ListView e Google Map V2 nella seconda scheda.

floating button too low

Questo è il XML di layout:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

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

     <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:layout_scrollFlags="scroll|enterAlways" /> 

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

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

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

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

Ecco il layout per il frammento nella prima scheda (l'elenco):

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <ListView 
       android:id="@+id/preview_list" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:choiceMode="singleChoice" 
       android:orientation="vertical" /> 

    <android.support.design.widget.FloatingActionButton 
      android:id="@+id/action_add" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="end|bottom" 
      android:layout_margin="16dp" 
      android:src="@mipmap/ic_add_white_48dp" /> 

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

Solo per assicurarsi; non è un problema con il FAB. Guarda questa foto È un layout simile. Un CoordinatorLayout con una barra degli strumenti e un ViewPager che scorre attraverso tutte le voci di dettaglio (quindi non sono necessarie schede). E ancora, la vista interna sembra essere troppo lunga (la stessa altezza della barra degli strumenti).

enter image description here

+0

Si prega di inviare il layout del frammento che include il FAB – doubleA

+0

vedere il post aggiornato – Matthias

+0

Bene chiaramente si può aggiungere margine alla parte inferiore del FAB e lo porterà su ma per quanto ne so che non dovrebbe accadere. Cosa succede quando si rimuove l'immagine src e si utilizza l'impostazione predefinita? – doubleA

risposta

3
  1. Si dovrebbe usare android.support.v7.widget.RecyclerView e non ListView
  2. Anche se si sta già utilizzando android.support.v7.widget.RecyclerView essere sicuri al 100% che si ha declard compile 'com.android.support:recyclerview-v7:23.0.0' nelle dipendenze build.gradle. Ho riscontrato lo stesso problema in cui il viewpager si sovrappone ai pulsanti di sistema. L'ho risolto aggiungendo semplicemente questa dipendenza.
+1

RecyclerView è pieno di buggy all'inferno – Matthias

+1

CoordinatorLayout non funzionerà con ListView. Sto usando RecyclerView nei miei progetti e non mi rendo mai conto hai incontrato bug a meno che tu non stia usando in modo errato. –

+0

L'uso di 'RecyclerView' ha fatto il trucco per me – Roman

1

Tutto ciò che cosa essere "punto" ha bisogno di essere diretta figlio di CoordinatorLayout, Compreso il AppBar, RecyclerView (ListView in API21 + o altro vista il supporto di scorrimento nidificato è OK), o FAB, ecc

il motivo per cui il tuo FAB è compensato fuori dello schermo, è che:

  1. ViewPager ha un @string/appbar_scrolling_view_behavior, l'attrezzo di questo comportamento compenserà vista quando si scorrere.
  2. inserisci FAB all'interno di ViewPager.

Così, quando l'offset del ViewPager cambiato, nulla all'interno ViewPager compenserà insieme (extra CoordinatorLayout non ha aiutare a cambiare offset).

Per risolvere questo problema, non utilizzare CoordinatorLayout fuori ViewPager.

Oppure:

  1. Metti la tua FAB fuori ViewPager in modo da non scorrere con ViewPager.
  2. Se il FAB funziona solo con alcune delle pagine, hide() quando necessario.

BTW, c'è un'ottima App, Cheesesquare Sample, per la demo della libreria di progettazione.