9

在我的项目中,我必须为和语言创建layout-ldltrlayout-ldrtl布局。Right-To-LeftLeft-To-Right

我启动了从右到左语言的应用程序,一切都很好。但是当方向改变时,android 加载layout-ldltr布局反对layout-ldrtl,虽然当前Locale设置为 RTL 语言!!!

如何解决这个问题?

AndroidManifest.xml

<application
    android:name=".QuranApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

layout-ldrtl\activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layoutDirection="rtl">

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

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:layoutDirection="rtl">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layoutDirection="rtl"/>

    <include
        layout="@layout/list_view"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>

更新

在@JohanShogun 发表评论后,我更改android:layoutDirection="rtl"android:layoutDirection="locale"大多数项目并解决了问题。

在第一张照片中,所有元素都显示得非常好:

纵向

在横向模式下,在标头项目中的StickyListHeader 列表视图中,它贴在屏幕顶部,Android 从ltr布局使用!:

横向

4

1 回答 1

6

如果您有一个带有 layout-land 的文件夹,它将接管 layout-ldrtl 等。您可能需要为 layout-land-ldrtl 等创建文件夹。

处理从右到左和从左到右布局的另一种方法是保留一个布局文件,该文件编写为可与两个版本一起使用。

在 LinearLayout 等上有一个属性:

android:layoutDirection

您可以将其设置为“Locale”的值,您的水平布局将翻转顺序。

而不是使用align_left/align_rightandgravity_left/gravity_right使用align_start/align_endand gravity_start/gravity_end(适用于所有left/right属性)。开始和结束标签取决于布局方向。如果用户的语言环境是ltr start 是 left并且end 是 right,如果用户有一个 locale 是rtl start 是 right并且end 是 left

我个人更喜欢使用为两者一起工作而编写的布局文件,rtlltr不是使用单独的布局文件,如果您保留不同的文件,很容易错过一个版本中的更新,从而导致糟糕的用户体验。

还将您的布局移动到布局文件夹(删除"-ldrtl"),然后将所有更改android:layoutDirection="rtl"android:layoutDirection="locale".

于 2015-07-26T09:02:30.710 回答