http://developer.Android.com/training/implementing-navigation/nav-drawer.html
Selon cette documentation, il n'est pas dit s'il est possible de mettre en œuvre un tiroir à partir du côté droit. Est-ce même possible ? :(
http://developer.Android.com/training/implementing-navigation/nav-drawer.html
Selon cette documentation, il n'est pas dit s'il est possible de mettre en œuvre un tiroir à partir du côté droit. Est-ce même possible ? :(
Le NavigationDrawer peut être configuré pour s'extraire par la gauche, la droite ou les 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>
Voici la documentation sur le tiroir et il apparaît que vous pouvez le configurer pour qu'il s'ouvre à gauche ou à droite.
Le positionnement et la disposition du tiroir sont contrôlés à l'aide de la fonction l'attribut Android:layout_gravity sur les vues enfant correspondant au côté de la vue sur lequel vous souhaitez que le tiroir soit positionné. côté de la vue d'où vous voulez que le tiroir émerge : gauche ou droite. (Ou début/fin sur les versions de la plate-forme qui prennent en charge la direction de la disposition).
http://developer.Android.com/reference/Android/support/v4/widget/DrawerLayout.html
Comment se fait-il que leur exemple ne fonctionne pas dans mon cas ? Je veux dire, je l'ai mis en hébreu, et je ne vois pas qu'il va sur le côté droit.
Je vais avoir besoin de plus pour continuer. Vous êtes sûr que tout est configuré correctement ? Je vous recommande de poster une nouvelle question.
J'ai décidé de laisser tomber. J'ai réussi à faire fonctionner leur projet en utilisant d'autres choses, puis j'ai décidé de ne pas l'utiliser car cela pourrait prêter à confusion d'avoir le tiroir de navigation de l'autre côté. Peut-être changerai-je d'avis plus tard.
Mon application s'est plantée avec l'erreur "No drawer view found with gravity LEFT".
J'ai donc ajouté ceci au onOptionsItemSelected :
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
À ajouter à https://stackoverflow.com/a/21781710/437039 solution.
Si vous utilisez le projet Navigation Drawer créé par Android Studio, alors les choses vont changer dans onOptionsItemSelected
. Comme 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. En 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 du côté droit fonctionne.
Ensuite, utilisez ces codes @amal, je pense que cela va vous aider. 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" />
//set 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 sur le clic de l'élément appeler la méthode displayView(position) ; 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");
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Vérifier cette réponse : stackoverflow.com/a/17792254/1572408 cela fonctionne pour moi.