http://developer.android.com/training/implementing-navigation/nav-drawer.html
根据该文件,没有说明是否可以从右侧实施抽屉。它甚至可能吗? :(
答案 0 :(得分:66)
NavigationDrawer可以配置为从左,右或两者拉出。关键是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>
答案 1 :(得分:46)
以下是抽屉上的文档,您可以将其配置为从左侧或右侧拉出。
使用。控制抽屉定位和布局 android:layout_gravity属性对应于子视图 您希望抽屉出现的视图的一侧:左侧或右侧。 (或者在支持布局方向的平台版本上开始/结束。)
http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
答案 2 :(得分:24)
我的应用程序崩溃了“没有抽屉视图发现重力左侧”错误。
因此将此添加到onOptionsItemSelected:
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
答案 3 :(得分:5)
添加到https://stackoverflow.com/a/21781710/437039解决方案。
如果您正在使用Android Studio创建的导航抽屉项目,则onOptionsItemSelected
中的内容会发生变化。由于他们创建了子类,因此必须使用此代码
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
中,您必须创建3个方法:
方法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);
}
只有现在,右侧抽屉才会起作用。
答案 4 :(得分:1)
然后使用这些代码@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");
}
}
答案 5 :(得分:1)
答案 6 :(得分:0)
要从屏幕右侧设置导航抽屉,请将导航视图的抽屉布局设为父级,并将导航视图的布局重力设置为右侧。
答案 7 :(得分:0)
将此代码写入Main.java,im1是xml文件右上方的导航栏图标。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
im1=findViewById(R.id.humburgericon);
im1.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View v) {
drawerLayout.openDrawer(Gravity.END);});