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? :(
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
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>
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);
}
}
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.
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
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:
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");
}
}
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.