【问题标题】:No drawer view found with gravity LEFT - Android没有找到重力LEFT的抽屉视图 - Android
【发布时间】:2022-03-31 16:50:16
【问题描述】:

我的菜单是从左到右打开的,但我希望它是从右到左打开的。我已经安排了从右到左打开的代码,但是现在代码不起作用我收到以下错误。

java.lang.IllegalArgumentException: No drawer view found with gravity LEFT

我在这一行得到一个错误:return NavigationUI.navigateUp(navController, mAppBarConfiguration)

主课

public class MainActivity extends AppCompatActivity {
    private AppBarConfiguration mAppBarConfiguration;
    NavigationView navigationView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
     mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_sss, R.id.nav_gelisim,
                R.id.nav_destek,R.id.nav_hakkımızda,R.id.nav_instagram)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
    }

XML

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layoutDirection="rtl"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:itemTextColor="@color/white"
        app:itemTextAppearance="@style/NavDrawerTextStyle"
        android:layout_gravity="right"
        android:theme="@style/NavigationView"
        android:background="@color/NavItem"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main2"
        app:menu="@menu/activity_main_drawer"/>


</androidx.drawerlayout.widget.DrawerLayout>

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以在上一篇文章中找到答案:

    Android DrawerLayout - No drawer view found with gravity

    【讨论】:

      【解决方案2】:

      您需要处理navigation 点击Toolbar 如下:

      ViewCompat.setLayoutDirection(toolbar, ViewCompat.LAYOUT_DIRECTION_RTL);
      toolbar.setNavigationOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              if (drawer.isDrawerOpen(GravityCompat.END))
                  drawer.closeDrawer(GravityCompat.END);
              else
                  drawer.openDrawer(GravityCompat.END);
          }
      });
      

      也不要忘记在需要时关闭抽屉,如下所示:

      drawer.closeDrawer(GravityCompat.END)
      

      【讨论】:

        【解决方案3】:

        你必须在你的根抽屉布局中设置布局方向

         android:layoutDirection="rtl"
        

        【讨论】:

          【解决方案4】:

          如果设置根抽屉的布局方向如下:

          android:layoutDirection="rtl"
          

          所有元素都会改变方向。要解决这个问题,请将所有元素放在一个 LinearLayout 中,并将 LinearLayout 方向设置为 ltr。

              <androidx.drawerlayout.widget.DrawerLayout 
                  xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:app="http://schemas.android.com/apk/res-auto"
                  android:id="@+id/drawer_layout"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  **android:layoutDirection="rtl"**
                  >
                  <LinearLayout
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical"
                  **android:layoutDirection="ltr"**>
                  <!--place your layout here-->
                  </LinearLayout>
                  <com.google.android.material.navigation.NavigationView
                  android:id="@+id/navigation_view"
                  android:layout_width="wrap_content"
                  android:layout_height="match_parent"
                  android:layout_gravity="start"
                  android:layoutDirection="rtl"
                  app:menu="@menu/drawer_menu" />
            </androidx.drawerlayout.widget.DrawerLayout>
          

          如果您正在使用导航组件,请在您的活动类中使用以下代码。

          override fun onCreate(savedInstanceState: Bundle?) {
              //...
              val navHostFragment = supportFragmentManager.findFragmentById(
                      R.id.my_nav_host_fragment
                  ) as NavHostFragment
                  navController = navHostFragment.navController
              binding.navigationView.setupWithNavController(navController)
              //...
              }
            override fun onSupportNavigateUp(): Boolean {
                      return NavigationUI.navigateUp(navController, binding.drawerLayout)
                  }
            override fun onBackPressed() {
                if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
                   binding.drawerLayout.closeDrawer(GravityCompat.START)
                } else {
                    super.onBackPressed()
                }
            }
          

          【讨论】:

            【解决方案5】:

            似乎 DrawerLayout 每次都需要在起始方向, 如果您希望它从左侧打开,您需要执行以下操作:

            • 制作你的 DrawerLayout android:layoutDirection="ltr"
            • 从您的 DrawerLayout XML 中删除 tools:openDrawer
            • 把你的导航视图android:layout_gravity="start"
            • 如果您希望您的内容是 RTL,请不要忘记在您的 contentView 容器中执行此操作android:layoutDirection="rtl"

            它会像魅力一样发挥作用!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多