【问题标题】:Android Layout Direction issue in API 17API 17 中的 Android 布局方向问题
【发布时间】:2016-02-14 08:36:52
【问题描述】:

我将构建一个波斯语应用程序 (RTL)。我的应用包含一个导航抽屉。

我在Manifest中添加了应用标签android:supportsRtl="true"

并在 onCreate() 方法中:getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

我知道小于 17 api 的 LayoutDirection 不起作用。

但是 api 17 中的图标(工具栏和 NavigationDrawer)被颠倒了:

API 22 中的结果(正确):

API 17 中的结果(不正确):

我该如何解决这个问题?

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="ir.mhborujerdi.mhb.ebook.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <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.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <include layout="@layout/content_main" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

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

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" />

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

【问题讨论】:

  • 你能把xml用于滑动布局吗

标签: android android-layout


【解决方案1】:

这个问题是不久前提出的,但是如果其他人需要解决这个问题,这将解决它

ViewCompat.setLayoutDirection( mRoot , ViewCompat.LAYOUT_DIRECTION_LTR );

我希望它可以帮助某人..

【讨论】:

    【解决方案2】:

    要求 API 至少为 17 有点贵,因为它并不老,而且今天仍在使用......

    我想建议另一种从右侧拉出导航抽屉的方法。

    因此,您需要在您的 xml 文件中更改该部分,

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />
    

    如果您将android:layout_gravity="start"设置为"right",菜单将从右侧打开,您可以通过始终面向右侧来设计xml。

    通过这种方式,您不必在 onCreate() 上设置布局,并且 API 不受 17+ 的限制。

    工具栏更新

    从棒棒糖开始,我们开始编写自己的Toolbar,而不是默认的操作栏,您可以放置​​自己的工具栏,整个设计由您决定。对于工具栏的例子,Mohammad,我很确定你可以通过简单的搜索找到足够多的东西

    【讨论】:

    • 谢谢。但是使用此解决方案会发生运行时错误:java.lang.IllegalArgumentException:在 android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:1464)
    【解决方案3】:

    您可以在 NavigationView 的 XML 中使用此代码:

        android:layoutDirection="rtl"
        android:textDirection="rtl"
    

    我希望它可以帮助某人..

    【讨论】:

      猜你喜欢
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多