导航抽屉 RTL

3
我是您在这个网站的新用户。 我现在正在使用Android Studio开发应用程序,我正在寻找一个漂亮的菜单,并发现了导航抽屉(Navigation Drawer)。我搜索了如何创建自己的导航,但我希望它位于屏幕的右侧。 我该怎么做?
同样的问题也适用于复选框(checkbox),我将其放在左侧并且文本放在右侧,我想要相反的效果。
希望您能理解我的问题。
XML:
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello Drawer"
        android:layout_gravity="center"
        android:gravity="center"/>
</LinearLayout>

<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:menu="@menu/navigation_menu"
    android:layout_gravity="right">
</android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

Java:

private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawerLayout);
    mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);

    mDrawerLayout.addDrawerListener(mToggle);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    if(mToggle.onOptionsItemSelected(item))
    {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

我已经尝试过了,它不起作用。 - Revolution3z
请提供一些代码和您已经完成的内容。 - Ergin Ersoy
怎么做啊..? :( - Revolution3z
请使用此链接:https://stackoverflow.com/help - Ergin Ersoy
我做到了:)。你知道更简单的方法吗?如果不知道,我该怎么解决我的问题?切换工具栏在左侧,而菜单本身在右侧。我希望它们两个都在右侧。 - Revolution3z
1个回答

2
关于右侧导航抽屉......我记得曾经为这个问题苦恼过。我查看了很多答案,大多数都说:使用setLayoutDirection方法即可,但只对api>=17有效。我按照以下步骤进行操作:

0. 支持库

 dependencies {
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.android.support:design:25.3.1'
}

1. 布局

activity_main.xml

(活动主界面)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="end">

    <!--content of your Activity. Could be fragment container. Your toolbar is placed there-->
    <include
        layout="@layout/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="right|end">

        <LinearLayout
            android:id="@+id/navigationLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!--navigation header. like user profile image &...-->
            <include
                layout="@layout/drawer_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <!--recycler of your navigation items-->
            <android.support.v7.widget.RecyclerView
                android:id="@+id/navigationRecycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

main_content.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout 
        android:id="@+id/toolbarRL"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageButton
            android:id="@+id/toolbarHamburger"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginRight="10dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@null"
            android:src="@drawable/hamburger" />

    </RelativeLayout>

... other stuff ...

</RelativeLayout>

2. Activity

//Hamburger icon of your toolbar
            ImageButton hamburger= (ImageButton) findViewById(R.id.toolbarHamburger);
            hamburger.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v){
                    if (drawerLayout.isDrawerOpen(Gravity.RIGHT))
                        drawerLayout.closeDrawer(Gravity.RIGHT);
                    else
                        drawerLayout.openDrawer(Gravity.RIGHT);
                }
            });

当单击recycler的项时,您应该使用drawerLayout.closeDrawer(Gravity.RIGHT)关闭抽屉。

关于CheckBox,我不知道是否有任何解决方案可以切换文本和CB的位置。但我不想费心寻找它。我宁愿使用包含CB和TV的linearLayout :)

或者,如果我发现它重复出现,我会创建一个自定义视图。

CB:CheckBox,TV:TextView


我尝试过了,但我不明白应该把菜单按钮放在哪里?是ImageButton吗? - Revolution3z
如果您所说的菜单按钮是指必须打开抽屉的按钮,那么是ImageButton。我现在已经添加了它的布局。 - navid
非常感谢,我会尝试并告诉你结果。背景是图标菜单吗?还是屏幕? - Revolution3z
你好,欢迎使用:) 希望它能为您工作。背景设置为空。@drawable/hamburger 是图标的图片。 - navid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接