web-dev-qa-db-fra.com

comment définir l'icône Disposition du tiroir dans le côté droit de l'écran du périphérique?

J'ai créé un exemple d'application de disposition de tiroir, cela fonctionne bien, mon problème est que la disposition de tiroir fonctionne parfaitement de droite à gauche, mais j'essaie de déplacer l'icône de gauche à droite, mais cela ne fonctionne pas, donnez-moi votre suggestion .. !!! C'est possible ou pas?

enter image description here

<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_gravity="right" >

    <!-- The main content view -->

    <FrameLayout
        Android:id="@+id/content_frame"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
         />
    <!-- The navigation drawer -->

    <ListView
        Android:id="@+id/drawer_list"
        Android:layout_width="240dp"
        Android:layout_height="match_parent"
        Android:layout_gravity="right"
        Android:background="#111"
        Android:choiceMode="singleChoice"
        Android:divider="@Android:color/transparent"
        Android:dividerHeight="0dp" />

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

Cette icône représente le menu de navigation qui, de par sa conception, doit se trouver à gauche de l'écran. Selon les directives, nous pouvons bien avoir un tiroir de navigation sur le côté droit, mais cela doit être utilisé pour modifier le contenu (par exemple, des filtres). Pour toutes ces raisons, vous pouvez utiliser ActionbarItem et placer un ActionItem dans le coin droit de l'écran. Cliquez sur cette action pour ouvrir ou fermer le tiroir de navigation de droite.

Mais pour sûr, conformément à la conception, cette icône de menu animée de trois lignes, qui représente la navigation doit être sur le côté gauche.

Juste pour information, pour placer le tiroir de navigation du côté droit, vous devez modifier la gravité du tiroir de navigation comme suit:

    <?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/main_background" >

    <!-- The main content view -->

    <FrameLayout
        Android:id="@+id/content_frame"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" >
    </FrameLayout>
    <!-- The navigation drawer -->

    <LinearLayout
        Android:id="@+id/right_drawer"
        Android:layout_width="280dp"
        Android:layout_gravity="end"
        Android:layout_height="match_parent"
        Android:orientation="vertical" />

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

De plus, dans ce cas, vous voulez vraiment l'icône du menu de navigation, utilisez à droite soit des présentations d'en-tête personnalisées, soit une bibliothèque comme ActionBarSherlock pour la modifier.

J'espère que ça aide!

5
Vivek Soneja

C'est peut-être trop tard, mais vous pouvez résoudre ce problème en utilisant le menu par défaut.

Créer res/menu/my_right_side_menu.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:myapp="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/btnMyMenu"
        Android:icon="@drawable/ic_drawer"
        Android:title="Right Side Menu"
        myapp:showAsAction="always"/>
</menu>

Puis ajoutez votre menu dans onCreateOptionsMenu() dans votre Activity

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    int menuToUse = R.menu.my_right_side_menu;

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(menuToUse, menu);

    return super.onCreateOptionsMenu(menu);
}

Ensuite, dans votre ActionBarDrawerToggle, gérez l'événement click de votre élément de menu

mDrawerToggle = new ActionBarDrawerToggle(this,  mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

        @Override
        public boolean onOptionsItemSelected(Android.view.MenuItem item) {
            if (item != null && item.getItemId() == R.id.btnMyMenu) {
                if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                    mDrawerLayout.closeDrawer(Gravity.RIGHT);
                } else {
                    mDrawerLayout.openDrawer(Gravity.RIGHT);
                }
                return true;
            }
            return false;
        }
    };

Et enfin, n'oubliez pas de cacher votre bouton Accueil à la ActionBar

getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(false);
6
Nando

Si vous utilisez AppBarLayout et Toolbar, procédez comme suit

<Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay"
        Android:layoutDirection="rtl">

        <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/AppTheme.PopupOverlay" />


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

remarque: Android: layoutDirection = "rtl"

4
farhang67

Voici une solution de type échappatoire qui a fonctionné dans mon cas.

toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar0, R.string.open_nav, R.string.close_nav);

J'ai créé une barre d'outils pour cela.

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <FrameLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:layout_marginRight="40dp"
            Android:layout_marginEnd="40dp"
            Android:background="@color/colorPrimary">
            <!-- this is your general toolbar-->
            <TextView
                Android:id="@+id/title"
                Android:layout_width="wrap_content"
                Android:layout_height="match_parent"
                Android:layout_gravity="right|end|center_vertical"
                Android:text="Mytitle"/>

        </Android.support.v7.widget.Toolbar>

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar0"
            Android:layout_width="40dp"
            Android:layout_height="?attr/actionBarSize"
            Android:layout_gravity="right|end"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
            <!-- this is your nav-button toolbar-->

    </FrameLayout>

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

et définissez onclicklistener pour cela:

toolbar0.setNavigationOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (drawer.isDrawerOpen(Gravity.RIGHT)) {
                drawer.closeDrawer(Gravity.RIGHT);
            } else {
                drawer.openDrawer(Gravity.RIGHT);
            }
        }

    });
0
navid

Vous avez deux options si vous souhaitez ne pas avoir de barre d’outils ou si vous n’avez pas besoin d’une barre d’outils comme dans mon cas, il est facile d’ajouter un ImageButton dans le coin droit de votre activité comme ceci.

<Android.support.v4.widget.DrawerLayout   
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="right" >

       <!-- The main content view -->
        <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

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

        <ImageButton
            Android:id="@+id/account_icon"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_alignParentRight="true"
            Android:layout_centerVertical="true"
            Android:padding="15dp"
            Android:background="@null"
            Android:src="@drawable/ic_menu_white_24dp" />

    </RelativeLayout>

<!-- The navigation drawer -->

<ListView
    Android:id="@+id/drawer_list"
    Android:layout_width="240dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="right"
    Android:background="#111"
    Android:choiceMode="singleChoice"
    Android:divider="@Android:color/transparent"
    Android:dividerHeight="0dp" />

puis ajoutez simplement un écouteur dessus et utilisez le tiroirLayout.isDrawerOpen () pour vérifier l'état actuel du tiroir dans des conditions normales, puis l'ouvrir et le fermer à l'aide de tiroirLayout.openDrawer () et tiroirLayout.closeDrawer (); et pour chacune des méthodes, vous pouvez indiquer si la gravité ou le tiroir dans votre cas est le cas. ListView donc ce devrait être quelque chose comme ceci tiroir_layout.isDrawerOpen (liste de tiroirs);

0
Mohamed Hajr