web-dev-qa-db-fra.com

Le bouton d'action flottante ne s'affiche pas sur la vue de recyclage (qui se trouve à l'intérieur d'un DrawerLayout)

J'essaie d'obtenir FAB sur recyclerview qui dans mon cas couvrira tout l'écran. Le FAB n'affiche pas même la vue de recyclage est vide. Voici mon code xml.

<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/drawer_layout"
    xmlns:tools="http://schemas.Android.com/tools"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    tools:context="com.technistan.ledger.CreateLedger"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

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


        <FrameLayout
            Android:orientation="vertical"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <Android.support.v7.widget.RecyclerView
                Android:paddingLeft="2dp"
                Android:paddingRight="2dp"
                Android:id="@+id/recyclerView"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_weight="1"

                />


            <Android.support.design.widget.FloatingActionButton
                Android:id="@+id/myFAB"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_gravity="bottom|end"
                Android:layout_margin="20dp"
                app:elevation="4dp" />


        </FrameLayout>

    </LinearLayout>


    <fragment
        Android:id="@+id/fragment_navigation_drawer"
        Android:layout_width="280dp"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        Android:name="com.technistan.ledger.NavigationDrawerFragment"
        tools:layout="@layout/fragment_navigation_drawer" />


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

L'aperçu montre le bouton flottant très bien comme dans l'accrochage ci-dessous; https://www.dropbox.com/s/18u5pt5v6kkkibj/Screen%20Shot%202015-09-13%20at%201.19.20%20PM.png?dl=

Mais lorsque j'exécute l'application, aucun FAB n'est affiché. J'avais essayé de nombreuses combinaisons mais je n'ai pas réussi. J'ai essayé ceci sur listview sans navigationdrawer (activité simple et cela fonctionnait là-bas c'est-à-dire affiché sur listview).

Toute aide sera appréciée les gars. Merci

[EDIT:] Je pense que le problème est dû à la disposition parent c.-à-d. Android.support.v4.widget.DrawerLayout, j'avais copié collé le code de du début à la fin d'une autre activité vide et il y montre le bouton flottant. Mais toujours incapable de comprendre comment résoudre ce problème, je dois afficher le bouton d'action flottant à l'intérieur du Drawerlayout.

15
Tariq Mahmud

Essayez-le comme ceci:

Supprimez toutes les dispositions.

Ne gardez qu'un seul parent, c'est CoordinatorLayout.

Dans CoordinatorLayout, mettez à la fois votre RecyclerView et FloatingActionButton.

CoordinatorLayout devrait organiser automatiquement votre barre d'outils, recycleur et fab, car il est programmé pour gérer les composants de la bibliothèque de support de conception.

Voici un exemple. Vous pouvez utiliser RecyclerView à la place de FrameLayout (qui charge dynamiquement les fragments au moment de l'exécution). J'utilise généralement RecyclerView dans un autre Fragment et je charge le fragment ici au moment de l'exécution. Cela maintient les fichiers xml propres.

<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/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.design.widget.CoordinatorLayout
    Android:id="@+id/layout_main"
    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"
        app:elevation="0dp">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

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


    <!-- Main layout for fragment placing -->
    <FrameLayout
        Android:id="@+id/container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >

    </FrameLayout>

    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fabBtn"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/ic_action"
        Android:layout_gravity="bottom|right"
        Android:layout_marginBottom="@dimen/fab_margin_bottom"
        Android:layout_marginRight="@dimen/fab_margin_right"
        app:fab_colorNormal="@color/pink"
        app:fab_colorPressed="@color/pink_pressed"
        app:borderWidth = "0dp" />


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

<!-- Nav drawer -->
<Android.support.design.widget.NavigationView
    Android:id="@+id/navigation"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    app:headerLayout="@layout/nav_header"
    app:itemIconTint="@color/pink_pressed"
    app:itemTextColor="@color/primary_text"
    app:menu="@menu/nav_menu" />

</Android.support.v4.widget.DrawerLayout>
14
anandbibek

Essayez d'utiliser FrameLayout au lieu de LinearLayout comme disposition racine. Cela a fonctionné pour moi.

1
Sabri Meviş