【问题标题】:Navigation drawer starts from right side导航抽屉从右侧开始
【发布时间】:2015-08-22 10:36:55
【问题描述】:

如何让导航抽屉从右向左打开?

Main.xml

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/navigation"
    android:background="#FFE7FF"/>

drawer_header.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="150dp"
android:baselineAligned="false"
android:orientation="vertical">

导航.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/Home"
        android:checked="true"
        android:icon="@drawable/homelogo"
        android:title="Home" /></group></menu>

这就是我在主要活动中创建它的方式

navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            switch (menuItem.getItemId()) {
              (..........)

我该怎么做?我试过 android:gravity 但它不起作用。

【问题讨论】:

  • btnHome.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 hideKeyboard(); handleDrawerLayout(); } });
  • 这是重复的问题,请参考:stackoverflow.com/questions/17852091/…
  • 我试过了,但我正在使用导航视图打开抽屉,drawerLayout.openDrawer(navigationView); ,所以我不能在这条线内使用重力

标签: android navigation-drawer


【解决方案1】:

在您的main.xml 中有android.support.design.widget.NavigationView,它具有以下属性:android:layout_gravity="end"。您必须将其设置为right,所以它将是这样的:android:layout_gravity="right"。 其余的由设计支持库完成。

请注意,Android Studio 将显示一条警告,提示您应使用end 而不是right,以确保在从右到左的语言中行为正确。您可以忽略此消息。

【讨论】:

  • 我试过了,但没有任何改变,顺便说一句,我决定把它改到左边。非常感谢。
  • 只需创建一个完全空白的应用程序,其中包含一个导航抽屉活动(只是 Android Studio 的默认设置),然后按照您的简单步骤将重力向右更改。您将以No drawer view found with gravity LEFT 异常结束。
【解决方案2】:

尝试设置 android:layout_gravity="end" 而不是 android:layout_gravity="start"

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

【讨论】:

  • 它对我不起作用,将 end 添加到 layout_gravity
【解决方案3】:

它确实改变了,只有两件事要做,

从 android studio->file->new->activity ->Navigation Draw 向您的 android 应用添加新 Activity 后......

你必须改变 机器人:layout_gravity="对" 在主布局中 android.support.design.widget.NavigationView 和 抽屉.closeDrawer(GravityCompat.END); 在主要活动的 OnNavigationItemSelected() 函数中。

【讨论】:

  • 它不起作用。你没有测试你的答案。 @omkar Dusane