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); }
直到现在,右侧的抽屉才会起作用。
然后使用这些代码@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
我希望这会帮助别人。
- 在Android中使用URI生成器或使用variables创buildURL
- 与数据库一起使用recyclerview
- 如何从appCompat 22.1及更高版本使用和设置新的AlertDialog
- EditText的首字母大写
- Android XML百分比符号
- 如何在Android中为TextView启用标准复制粘贴?
- 如何实现autocompletetextview与列表视图?
- buider.show()中的“android.view.WindowManager $ BadTokenException:无法添加窗口”
- Android的WebView呈现空白/白色,视图不更新的CSS更改或HTML更改,animation是波涛汹涌