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?
<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>
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!
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);
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"
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);
}
}
});
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);