Android – 从右侧导航抽屉可能吗?

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

根据这个文件,并没有说是否有可能从右侧执行抽屉。 这甚至有可能吗? 🙁

以下是抽屉上的文档,您可以将其configuration为从左侧或右侧拉出。

抽屉的定位和布局是通过在子视图上使用android:layout_gravity属性来控制的,这个属性对应于你希望抽屉出现在左边或右边的视图的哪一边。 (或者在支持布局方向的平台版本上开始/结束。)

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

NavigationDrawer可以configuration为从左边,右边或两者拉出。 关键是XML声明中抽屉出现的顺序和layout_gravity属性。 这里是一个例子:

<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> 

我的应用程序崩溃与“没有抽屉视图find重力左”的错误。

所以添加到onOptionsItemSelected:

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

添加到https://stackoverflow.com/a/21781710/437039解决scheme。;

如果您使用的是由Android Studio创build的导航抽屉项目,那么事情会改变onOptionsItemSelected 。 由于他们创build了子类,所以你必须使用这个代码

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

下一个。 在类NavigationDrawerFragment ,你必须创build3个方法:

方法1

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

方法2

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

方法3

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

直到现在,右侧的抽屉才会起作用。

我知道这是一个老问题,但对于那些仍在寻找答案的人来说:

是的,这是可能的。 请检查我的答案在下面的链接:

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

然后使用这些代码@amal我想这会帮助你。 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" /> 

//设置所需的图像

活动代码:

 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); } }); } } 

在这里你可以设置自己的列表适配器的列表和项目点击调用displayView(position); 方法,您可以将您的片段添加到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"); } } 

您可以使用Material Design中的NavigationView 。 例如:

 <?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> 

有关完整的教程,请参阅http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html

我希望这会帮助别人。