【问题标题】:Android Navigation Drawer RTL crashAndroid 导航抽屉 RTL 崩溃
【发布时间】:2015-12-28 20:11:06
【问题描述】:

我正在将 appcompact 用于导航抽屉,一切正常,如下所示,但是当我尝试使用 android:layout_gravity="start" 从 RTL 更改抽屉时,应用程序编译但单击图标时它会崩溃了解导致崩溃的原因以及如何使其 RTL

<LinearLayout 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"
          android:orientation="vertical">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:background="@color/color_primary"
    android:minHeight="?attr/actionBarSize" />

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start">
    <!-- Main layout -->
    <FrameLayout
        android:id="@+id/main_fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
              android:layout_width="240dp"
              android:layout_height="match_parent"
              android:layout_gravity="end"
              android:choiceMode="singleChoice"
              android:divider="@android:color/transparent"
              android:dividerHeight="0dp"
              android:background="#ccc"/>


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

这是错误日志

Process: inducesmile.com.androidnavigationdrawer, PID: 15182
java.lang.IllegalArgumentException: No drawer view found with gravity LEFT
        at 

【问题讨论】:

  • 你能粘贴你的错误日志吗
  • @Ibukun 我已经添加了错误日志
  • 为什么您的 ListView 布局重力是“结束”?我之前没有尝试过 RTL,所以 IDK 它也应该是“开始”。不过你可以试一试。
  • 您可以发布您的活动代码吗?

标签: android navigation-drawer right-to-left


【解决方案1】:

正如您所说,您通过 "android:layout_gravity="start" 属性打开导航抽屉:这有利于 RTL 兼容性。

事情是当应用程序是

  • LTR:开始 = 左,结束 = 右
  • RTL:开始 = 右,结束 = 左

因此,在使用 LEFT 和 RIGHT 属性时应小心:我们通常仅在存在视图、文本方向或许多其他属性时才使用它们,无论您使用哪种语言都应保持相同。

所以你的 java 异常表明你的类使用 Gravity.LEFT 而不是 Gravity.START
因此,您尝试从 Gravity.LEFT 一侧打开一个抽屉,在您的布局上显示 layout_gravity="start" 它会在 RTL 上打开 right 一侧:这两个属性必须始终相同。

例如必须改变:

myDrawerLayout.openDrawer(Gravity.LEFT);

到:

myDrawerLayout.openDrawer(Gravity.START);

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多