web-dev-qa-db-fra.com

Android - Le tiroir de navigation du côté droit est-il possible?

http://developer.Android.com/training/implementing-navigation/nav-drawer.html

Selon ce document, il n'est pas précisé s'il est possible d'implémenter tiroir de droite. Est-ce même possible? :(

62
user2062024

Voici la documentation sur le tiroir et il semble que vous puissiez le configurer pour s’extraire de la gauche ou de la droite.

Le positionnement et la disposition des tiroirs sont contrôlés à l’aide de la touche Android: attribut layout_gravity sur les vues enfant correspondant à lequel vous souhaitez que le tiroir sorte: côté gauche ou droit . (Ou démarrez/terminez sur les versions de plate-forme prenant en charge la direction de la disposition.)

http://developer.Android.com/reference/Android/support/v4/widget/DrawerLayout.html

46
Larry McKenzie

Le NavigationDrawer peut être configuré pour s’extraire de la gauche, de la droite ou des deux. La clé est l'ordre d'apparition des tiroirs dans la déclaration XML et l'attribut layout_gravity. Voici un exemple:

<Android.support.v4.widget.DrawerLayout
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <FrameLayout
        Android:id="@+id/content"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:baselineAligned="false" >
    </FrameLayout>

    <!-- Left drawer -->

    <ListView
        Android:id="@+id/left_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="left"
        Android:choiceMode="singleChoice" />

    <!-- Right drawer -->

    <ListView
        Android:id="@+id/right_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="right"
        Android:choiceMode="singleChoice" />
</Android.support.v4.widget.DrawerLayout>
65
Jeshurun

Mon application s'est plantée avec l'erreur "Aucune vue de tiroir trouvée avec la gravité à gauche".  

Donc ajouté ceci à la onOptionsItemSelected:

if (item != null && item.getItemId() == Android.R.id.home) {
        if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
            mDrawerLayout.closeDrawer(Gravity.RIGHT);
        } else {
            mDrawerLayout.openDrawer(Gravity.RIGHT);
        }
    }
24
amalBit

Pour ajouter à https://stackoverflow.com/a/21781710/437039 solution. 

Si vous utilisez le projet Tiroir de navigation créé par Android Studio, la situation changera dans onOptionsItemSelected. Depuis qu'ils ont créé la classe enfant, vous devez utiliser ce code

if (item != null && id == Android.R.id.home) {
        if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
            mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
        } else {
            mNavigationDrawerFragment.openDrawer(Gravity.RIGHT);
        }
        return true;
}

Suivant. Dans la classe NavigationDrawerFragment, vous devez créer 3 méthodes: 

Méthode 1 

public boolean isDrawerOpen(int gravity) {
    return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity);
}

Méthode 2

public void closeDrawer(int gravity) {
    mDrawerLayout.closeDrawer(gravity);
}

Méthode 3

public void openDrawer(int gravity) {
    mDrawerLayout.openDrawer(gravity);
}

Seulement maintenant, le tiroir de droite fonctionnera. 

5
sandalone

Vous pouvez utiliser NavigationView à partir de la conception du matériau. Pour ex:

<?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"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <Android.support.design.widget.NavigationView
        Android:id="@+id/nav_view"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="end"
        Android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

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

Pour consulter le didacticiel complet, consultez http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html

3
Gunaseelan

Je sais que c'est une vieille question, mais pour ceux qui cherchent encore la réponse: 

Oui c'est possible. S'il vous plaît vérifier ma réponse sur le lien ci-dessous: 

https://stackoverflow.com/a/19358114/1572408

1
Rudi

Ensuite, utilisez ces codes @amal, je pense que cela vous aidera . XML:

<!-- Framelayout to display Fragments -->

<FrameLayout
    Android:id="@+id/frame_container"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="48dp"
        Android:background="@drawable/counter_bg" >

        <ImageView
            Android:id="@+id/iconl"
            Android:layout_width="25dp"
            Android:layout_height="wrap_content"
            Android:layout_gravity="left"
            Android:layout_marginLeft="12dp"
            Android:layout_marginRight="12dp"
            Android:src="@drawable/ic_launcher" />

        <ImageView
            Android:id="@+id/iconr"
            Android:layout_width="25dp"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_alignParentTop="true"
            Android:layout_marginRight="17dp"
            Android:src="@drawable/ic_launcher" />
    </RelativeLayout>
</FrameLayout>

<!-- Listview to display slider menu -->

<ListView
    Android:id="@+id/list_slidermenu"
    Android:layout_width="240dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    Android:background="@color/list_background"
    Android:choiceMode="singleChoice"
    Android:divider="@color/list_divider"
    Android:dividerHeight="1dp"
    Android:listSelector="@drawable/list_selector" />

<ListView
    Android:id="@+id/list_slidermenu2"
    Android:layout_width="240dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="end"
    Android:background="@color/list_background"
    Android:choiceMode="singleChoice"
    Android:divider="@color/list_divider"
    Android:dividerHeight="1dp"
    Android:listSelector="@drawable/list_selector" />

// définir les images requises

Code d'activité:

ImageView iconl,iconr;

private DrawerLayout mDrawerLayout;
private ListView mDrawerList,mDrawerList2;

ImageView iconl,iconr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iconl = (ImageView)findViewById(R.id.iconl);
    iconr = (ImageView)findViewById(R.id.iconr);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
    mDrawerList2 = (ListView) findViewById(R.id.list_slidermenu2);
    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
    mDrawerList2.setOnItemClickListener(new SlideMenuClickListener());
    iconl.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mDrawerLayout.openDrawer(Gravity.START);
            mDrawerLayout.closeDrawer(Gravity.END);
        }
    });
    iconr.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mDrawerLayout.openDrawer(Gravity.END);
            mDrawerLayout.closeDrawer(Gravity.START);
        }
    });
}
}

et ici vous pouvez définir votre propre adaptateur de liste pour les deux listes et cliquer sur un élément d’appel displayView (position); méthode où vous pouvez ajouter votre fragment à framelayout.

/**
 * Diplaying fragment view for selected nav drawer list item
 * */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;


    default:
        break;
    }

    if (fragment != null) 
    {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
        .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);

        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}
1
Rohit Goswami

Pour définir le tiroir de navigation à partir de la droite de l'écran, définissez la disposition du tiroir comme parent de la vue de navigation et définissez la gravité de la disposition de la vue de navigation à droite.

0
Vikash Sharma