2015-08-27 13 views
9

Nie mogę wyświetlić pływającego przycisku akcji (FAB), aby pojawił się we właściwej pozycji. Chcę, aby pojawiła się między nagłówkiem a pierwszym elementem w szufladzie nawigacji.Nie można umieścić pływającego przycisku akcji (FAB) między nagłówkiem a elementami w oknie DrawerLayout przy użyciu RecyclerView

enter image description here

Obecnie mam go do stawienia się w prawym dolnym rogu nagłówka, a nie na górze linii pomiędzy elementami 1 i 2 (1 elementu = nagłówku & 2-ej = pierwsza pozycja w recyklingu).

Moja aplikacja jest przy użyciu następujących elementów AppCompat:

  • AppCompat-v7: 23.0.0
  • recyclerview-v7: 23.0.0
  • design: 23.0.0

Używam szuflady nav, ale nie mogę korzystać z NavigationView, ponieważ potrzebuję dostosować pozycje elementów i nie ładować prostego menu.

Jak wiadomo, szuflada naprawdę nie jest 2 różnymi kontrolkami. Nagłówek jest w rzeczywistości elementem "0" w oknie RecyclerView. Nie wiem, czy to robi różnicę.

Oto mój obecny xml dla nagłówka/„0 widzenia w 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> 

myślę, że mam fab w niewłaściwym położeniu/pliku. Oto xml dla szuflady.

 <?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> 

POMOC !!!!!

+0

Normalnie, nie należy umieszczać FAB wewnątrz szuflady. FAB służy do promowania pozytywnych działań. Ale szuflada jest przeznaczona do nawigacji! – makata

+0

Uzgodnione. Myślę, że jest to właściwe w tej sytuacji. Chcę umieścić menu opcji (sort). Mogę dodać go do dolnej części szuflady, ale myślę, że wygląda lepiej i ma większy sens jako FAB. Wszelkie pomysły, jak to zrobić? – JustLearningAgain

+0

Nie ma możliwości, że widok może znajdować się poza widokiem, w którym się znajduje. Myślę, że trzeba by przenieść nagłówek poza widok recyklingu do 'AppBarLayout'. – tachyonflux

Odpowiedz

7

przykład szuflada układ fragment zawierający istniejącego 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

Ładne rozwiązanie! Dla 'FAB' sugeruję używać' layout_margin' jako '16dp' dla telefonów i' 24dp' dla tabletów –