我已经创建了抽屉布局示例应用程序,它工作正常,我的问题是抽屉布局从右到左完美地工作但我试图将图标左侧移动到右侧但它不起作用给我你的建议.. !! !这有可能吗?
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
答案 0 :(得分:7)
可能为时已晚,但您可以使用默认菜单解决此问题。
创建res/menu/my_right_side_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/btnMyMenu"
android:icon="@drawable/ic_drawer"
android:title="Right Side Menu"
myapp:showAsAction="always"/>
</menu>
然后在onCreateOptionsMenu()
Activity
添加您的菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
int menuToUse = R.menu.my_right_side_menu;
MenuInflater inflater = getMenuInflater();
inflater.inflate(menuToUse, menu);
return super.onCreateOptionsMenu(menu);
}
接下来,在ActionBarDrawerToggle
处理菜单项的点击事件
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
if (item != null && item.getItemId() == R.id.btnMyMenu) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
return true;
}
return false;
}
};
最后不要忘记隐藏ActionBar
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(false);
答案 1 :(得分:5)
此图标表示导航菜单,其设计必须位于屏幕的左侧。根据指南,我们可以在右侧有一个导航抽屉,但是它应该用于修改内容(例如过滤器)。出于所有这些目的,您可能希望使用ActionbarItem,并在屏幕的右上角放置一个ActionItem。单击该操作项将打开或关闭右侧导航抽屉。
但可以肯定的是,根据设计,这个代表导航的动画三线菜单图标应位于左侧。
仅供参考,要将导航抽屉放在右侧,您必须按如下方式更改导航抽屉的重力:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/main_background" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!-- The navigation drawer -->
<LinearLayout
android:id="@+id/right_drawer"
android:layout_width="280dp"
android:layout_gravity="end"
android:layout_height="match_parent"
android:orientation="vertical" />
</android.support.v4.widget.DrawerLayout>
此外,在这种情况下,您真的非常希望右侧的导航菜单图标使用自定义标题布局或ActionBarSherlock等库来编辑它。
我希望这有帮助!
答案 2 :(得分:5)
如果您使用AppBarLayout和工具栏,请执行以下操作
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
android:layoutDirection="rtl">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
注意:android:layoutDirection =“rtl”
答案 3 :(得分:1)
这是一个像我这样的漏洞式解决方案。
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar0, R.string.open_nav, R.string.close_nav);
我为它编了一个工具栏。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp"
android:background="@color/colorPrimary">
<!-- this is your general toolbar-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right|end|center_vertical"
android:text="Mytitle"/>
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar0"
android:layout_width="40dp"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="right|end"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<!-- this is your nav-button toolbar-->
</FrameLayout>
</android.support.design.widget.AppBarLayout>
并为它设置onclicklistener:
toolbar0.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer.isDrawerOpen(Gravity.RIGHT)) {
drawer.closeDrawer(Gravity.RIGHT);
} else {
drawer.openDrawer(Gravity.RIGHT);
}
}
});
答案 4 :(得分:0)
如果您想要没有工具栏或者不需要像我的情况那样的工具栏,您有两种选择,只需在右侧添加ImageButton即可像你这样的活动的一角
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" >
<!-- The main content view -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ImageButton
android:id="@+id/account_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:padding="15dp"
android:background="@null"
android:src="@drawable/ic_menu_white_24dp" />
</RelativeLayout>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
然后只需在其上添加一个监听器并使用 drawerLayout.isDrawerOpen() 来检查正常if条件下抽屉的当前状态,然后打开并关闭抽屉使用 drawerLayout.openDrawer( )和 drawerLayout.closeDrawer(); 以及每个抽屉您可以传递的方法,无论重力或者您的情况下的drawerView是ListView,所以它应该是这样的 的 drawer_layout.isDrawerOpen(drawer_list); 强>
答案 5 :(得分:-5)
使用。控制抽屉定位和布局 android:layout_gravity属性对应于子视图 您希望抽屉出现的视图的一侧:左侧或右侧。 (或者在支持布局方向的平台版本上开始/结束。)
这意味着,您可以通过以下方式执行此操作:
<DrawerLayout
android:layout_gravity="right">
</DrawerLayout>
根据Creating a Navigation Drawer,
抽屉视图(ListView)必须指定其水平重力 使用android:layout_gravity属性。支持从右到左 (RTL)语言,使用“start”而不是“left”指定值(所以 当布局为RTL时,抽屉出现在右侧。
所以你应该这样做:
<DrawerLayout
android:layout_gravity="start">
</DrawerLayout>