约束布局中的布局方向无法工作

4
我想使用ConstraintLayout来实现阿拉伯语和英语的相同布局。当我使用LinearLayout时,ImageView和TextView会水平对齐,并根据语言更改布局方向。但是当我使用ConstraintLayout时,ImageView和TextView在阿拉伯语中不会从右到左对齐。
布局预览截图: 英文预览 阿拉伯文预览 期望的阿拉伯文输出 但是当我使用ConstraintLayout时,无法实现这一点。
<?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/rootView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:background="@color/white"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher_2"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:text="@string/work_name"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintStart_toEndOf="@+id/imageView"
            app:layout_constraintTop_toTopOf="@+id/imageView" />

    </androidx.constraintlayout.widget.ConstraintLayout>
2个回答

2
右对齐文本的方法
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:text="@string/work_name"
        android:gravity="center|right"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />

android:gravity="center|right"

在编码中设置布局方向

1)在onCreate()中找到TextView的id

2)按照以下代码操作

textview.setGravity(Gravity.CENTER|Gravity.RIGHT);
OR
textview.setGravity(Gravity.CENTER|Gravity.LEFT);

3) 根据您的文本进行应用。

我建议您在约束布局中使用2个ImageView和2个TextView,当您想显示英文文本时,请隐藏右侧的图像和文本,并显示左侧的图像和文本,对于阿拉伯文本,请反之操作。

试试吧。


我不想为阿拉伯语创建额外的布局。 - Shakir
@MohamedShakir 请查看我编辑过的答案。 - Mohsin kazi

0
如果您想在整个项目中保持阿拉伯语布局与英语布局相同,则请添加此行代码到清单文件中:

Manifest:

    <application
    android:supportsRtl="false"

我建议你为每种从右到左的语言制作一个单独的XML文件。需要注意的是,从右到左的语言简码如(-ar、-fa、-ps、-sd、-ur),如果还有更多阿拉伯语编码,请告诉我们。

这个标志位可以设置为false,但是在某些地方是否允许手动使用RTL/LTR方向呢? - android developer
android:supportsRtl="false" 在应用程序级别中定义。一旦定义,如果您没有定义layout-ar,则阿拉伯语/英语语言将具有相同的布局。 - صلي علي محمد - Atef Farouk
我不明白。你的意思是把布局文件放在这个文件夹里,它们就不会被使用了吗?不过我的问题是关于ConstraintLayout的... - android developer
我能不能让 "android:supportsRtl="false" 保持不变,逐个修复布局,而不影响其他部分(因为它们可能会出现问题)? - android developer
当然,这是最好的解决方案。使用“android:supportsRtl =”false“将为英语/阿拉伯语提供相同的布局行为。通过添加layout-ar来修复每个活动,并更改此布局以满足您的需求方向。如果需要,请不要忘记将layout-ar复制到其他从右到左的语言(如fa,-ps,-sd,-ur)。 - صلي علي محمد - Atef Farouk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接