2015-08-27 10 views
9

Impossibile visualizzare il Floating Action Button (FAB) nella posizione corretta. Voglio che appaia tra l'intestazione e il primo elemento nel mio cassetto nav.Impossibile posizionare il Floating Action Button (FAB) tra l'intestazione e gli elementi in DrawerLayout utilizzando RecyclerView

enter image description here

Attualmente, li ho a comparire in basso a destra della testata e non sulla parte superiore della linea di demarcazione tra il 1 ° e 2 ° elementi (1 ° elemento = intestazione & secondo elemento = prima voce in recyclerview).

La mia applicazione sta usando i seguenti elementi: AppCompat

  • appcompat-v7: 23.0.0
  • recyclerview-v7: 23.0.0
  • disegno: 23.0.0

Uso un cassetto di navigazione ma non riesco a utilizzare NavigationView perché è necessario personalizzare le voci dell'articolo e non caricare un menu semplice.

Come sapete, il cassetto non è in realtà 2 controlli diversi. L'intestazione è in realtà l'elemento '0' in RecyclerView. Non so se questo faccia la differenza.

Ecco il mio attuale xml per l'intestazione/"0 vista in RecyclerView":

 <?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="@dimen/navdrawer_image_height"> 


    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/navDrawerHeaderView" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/navdrawer_image_height"> 

     <ImageView 
      android:id="@+id/navdrawer_image" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/navdrawer_image_height" 
      android:contentDescription="@string/cd_navdrawer_image" 
      android:scaleType="centerCrop" 
      android:src="@drawable/bg_material_design" /> 

     <de.hdodenhof.circleimageview.CircleImageView 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/app_image" 
      android:layout_width="@dimen/navdrawer_user_picture_size" 
      android:layout_height="@dimen/navdrawer_user_picture_size" 
      android:src="@drawable/ic_launcher" 
      android:layout_marginTop="16dp" 
      android:layout_marginLeft="16dp" 
      android:layout_marginStart="16dp" 
      app:border_width="2dp" 
      app:border_color="#FF000000"/> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/appNameTextView" 
      android:text="App Name" 
      android:textStyle="bold" 
      android:layout_marginLeft="16dp" 
      android:layout_marginStart="16dp" 
      android:layout_marginBottom="16dp" 
      android:layout_alignParentBottom="true" 
      android:textColor="@android:color/white"/> 

    </RelativeLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" 
     android:clickable="true" 
     android:src="@drawable/button_account" 
     app:layout_anchor="@id/navDrawerHeaderView" 
     app:layout_anchorGravity="bottom|right|end" 
     app:elevation="4dp"/> 

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

Penso che potrei avere il FAB nel percorso/file sbagliato. Ecco l'xml per il cassetto.

 <?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawerLayout" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:fitsSystemWindows="true"> 

    <!-- Content layout --> 
    <LinearLayout 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/toolbar" 
      layout="@layout/tool_bar"/> 

     <FrameLayout 
      android:id="@+id/contentFrame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@drawable/init_background"> 
     </FrameLayout> 

    </LinearLayout> 

    <!-- Pages --> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="320dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:background="#ffffff" 
     android:scrollbars="vertical" 
     android:clickable="true" 
     android:focusable="true" 
     android:focusableInTouchMode="true"> 

    </android.support.v7.widget.RecyclerView> 

</android.support.v4.widget.DrawerLayout> 

AIUTO !!!!!

+0

Normalmente, non dovrebbe porre FAB all'interno di un cassetto. FAB è utilizzato per azioni positive promosse. Ma il cassetto è destinato alla navigazione! – makata

+0

concordato. Penso che sia appropriato in questa situazione. Voglio posizionare un menu di opzioni (di sorta). Potrei aggiungerlo al fondo del cassetto, ma penso che abbia un aspetto migliore e abbia più senso come FAB. Qualche idea su come farlo? – JustLearningAgain

+0

Non c'è modo che una vista possa essere al di fuori di una vista in cui si trova. Penso che avresti bisogno di spostare la tua intestazione all'esterno del recyclerview in un 'AppBarLayout'. – tachyonflux

risposta

7

esempio cassetto il layout frammento contenente il vostro attuale RecyclerView:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="200dp"> 
     <View 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#f00" 
      android:id="@+id/header"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     android:scrollbars="vertical" 
     android:clickable="true" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    <android.support.design.widget.FloatingActionButton 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     app:layout_anchor="@id/appbar" 
     app:layout_anchorGravity="bottom|right|end" 
     android:layout_margin="5dp" 
     android:clickable="true"/> 

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

Bella soluzione! Per 'FAB' suggerisco di usare' layout_margin' come '16dp' per i telefoni e' 24dp' per i tablet –