【问题标题】:ConstraintLayout ListView RTL some lines are not RTLConstraintLayout ListView RTL 有些行不是 RTL
【发布时间】:2018-12-06 10:16:09
【问题描述】:

在我的 ListView 上,有些行未RTL 对齐滚动后重绘线条是正确的。

我的订单项布局:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/clFrontView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

    <ImageView
        android:id="@+id/ivCircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/circle"
        tools:ignore="ContentDescription"
        android:layout_marginTop="5dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintLeft_toLeftOf="parent" />

    <ImageView
        android:id="@+id/ivReminderType"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        tools:ignore="ContentDescription"
        app:layout_constraintTop_toTopOf="@id/ivCircle"
        app:layout_constraintBottom_toBottomOf="@id/ivCircle"
        app:layout_constraintStart_toStartOf="@id/ivCircle"
        app:layout_constraintEnd_toEndOf="@id/ivCircle"
        app:layout_constraintLeft_toLeftOf="@id/ivCircle"
        app:layout_constraintRight_toRightOf="@id/ivCircle" />

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/civContactImage"
        android:layout_width="42dp"
        android:layout_height="42dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>

    <ImageView
        android:id="@+id/icivCircleSmall"
        android:layout_width="15dp"
        android:layout_height="15dp"
        app:layout_constraintEnd_toEndOf="@id/civContactImage"
        app:layout_constraintRight_toRightOf="@id/civContactImage"
        app:layout_constraintBottom_toBottomOf="@id/civContactImage"
        tools:ignore="ContentDescription"/>

    <TextView
        android:id="@+id/tvTextLine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        tools:text="Line of Text"
        android:textSize="18sp"
        android:maxLines="2"
        app:layout_constraintLeft_toRightOf="@id/ivCircle"
        app:layout_constraintStart_toEndOf="@id/ivCircle"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"/>

    <TextView
        android:id="@+id/tvTextLine2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textSize="16sp"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="@id/tvTextLine"
        app:layout_constraintLeft_toLeftOf="@id/tvTextLine"
        app:layout_constraintTop_toBottomOf="@id/tvTextLine" />

    <TextView
        android:id="@+id/tvTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        tools:text="Wed, 01.05.2018 10:10"
        android:textColor="#FF909090"
        android:textSize="12sp"
        android:drawablePadding="5dp"
        app:layout_constraintStart_toStartOf="@id/tvTextLine"
        app:layout_constraintLeft_toLeftOf="@id/tvTextLine"
        app:layout_constraintTop_toBottomOf="@id/tvTextLine2" />

    <TextView
        android:id="@+id/tvRepeat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        tools:text="Every 2nd Friday"
        android:textColor="#FF909090"
        android:textSize="12sp"
        android:drawablePadding="5dp"
        app:layout_constraintStart_toStartOf="@id/tvTextLine"
        app:layout_constraintLeft_toLeftOf="@id/tvTextLine"
        app:layout_constraintTop_toBottomOf="@id/tvTime" />

</android.support.constraint.ConstraintLayout>

首先开始是这样的,第一行不是RTL:

向下滚动并再次向上滚动后正确:

build.gradle 依赖:

implementation 'com.android.support.constraint:constraint-layout:1.1.2'

【问题讨论】:

  • 我认为,您可以通过删除所有app:layout_constraintLeft_toLeftOf' and app:layout_constraintLeft_toRightOf' 来修复它,并确保存在等效的app:layout_constraintLeft_toStartOfapp:layout_constraintLeft_toEndOf!..
  • @Pzy64:我的布局中已经有 Start_toStartOf 和 End_toEndOf。为什么要添加“Left_toStartOf”?我不知道这应该是什么。如果你想要 RTL,Left 不是,它应该是 Start_toStartOf。还是我错过了什么?
  • 好的,我的意思是删除所有toLefttoRight,如果布局中断添加等效的toStarttoEnd 或其他。基本上,当您编写LeftRight 时,它只是保持左或右覆盖RTL Bevavior。如果您希望您的代码完全遵守 RTL 行为,您可能需要删除指定 left 或 right 的每个属性,并替换为 start 或 end,除非您真的想要!!.. 可能存在您希望按钮位于右侧的情况Edittext 即使 RTL 与否,在这种情况下,您可以指定 Right 或 Left。 ..(如果我错了,请纠正我..)
  • 好的我明白了,但我的问题是 ListView 中只有一些行不是从右到左的。滚动后是从右到左。所以这不是一个普遍的问题。无论如何,如果我删除所有 toLeft 和 toRight,我也会遇到同样的问题。 :-(
  • 您好,您解决了这个问题吗?

标签: android android-layout right-to-left android-constraintlayout


【解决方案1】:

试试这个也许可以解决问题。有小的测试更改,您可以根据需要删除它们,首先,我将 tools:text 更改为 android:text 以便它显示虚拟数据。其次,两个名为 ivReminderType 的图像视图和icivCircleSmall 我放了两个默认图像只是为了测试目的,所以一定要改变它。还有一个名为 icivCircleSmall 的图像视图,我不知道它应该被限制在哪里,所以我没有编辑任何为它编写的代码。下面是xml的编辑代码。

<android.support.constraint.ConstraintLayout 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:id="@+id/clFrontView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="10dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="10dp">

    <ImageView
        android:id="@+id/ivCircle"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintBottom_toTopOf="@+id/tvRepeat"
        app:layout_constraintEnd_toStartOf="@+id/tvTime"
        app:layout_constraintTop_toBottomOf="@+id/tvTextLine"
        tools:ignore="ContentDescription" />

    <ImageView
        android:id="@+id/ivReminderType"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintBottom_toBottomOf="@+id/tvRepeat"
        app:layout_constraintEnd_toStartOf="@+id/tvRepeat"
        app:layout_constraintTop_toBottomOf="@+id/tvTime"
        tools:ignore="ContentDescription" />

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/civContactImage"
        android:layout_width="42dp"
        android:layout_height="42dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/icivCircleSmall"
        android:layout_width="15dp"
        android:layout_height="15dp"
        app:layout_constraintBottom_toBottomOf="@id/civContactImage"
        app:layout_constraintEnd_toEndOf="@id/civContactImage"
        app:layout_constraintRight_toRightOf="@id/civContactImage"
        tools:ignore="ContentDescription" />

    <TextView
        android:id="@+id/tvTextLine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:gravity="center_vertical"
        android:maxLines="2"
        android:text="Line of Text"
        android:textSize="18sp"
        app:layout_constraintEnd_toStartOf="@+id/civContactImage"
        app:layout_constraintTop_toTopOf="@+id/civContactImage" />

    <TextView
        android:id="@+id/tvTextLine2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textSize="16sp"
        android:visibility="gone"
        app:layout_constraintLeft_toLeftOf="@id/tvTextLine"
        app:layout_constraintStart_toStartOf="@id/tvTextLine"
        app:layout_constraintTop_toBottomOf="@id/tvTextLine" />

    <TextView
        android:id="@+id/tvTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:drawablePadding="5dp"
        android:gravity="center_vertical"
        android:text="Wed, 01.05.2018 10:10"
        android:textColor="#FF909090"
        android:textSize="12sp"
        app:layout_constraintEnd_toStartOf="@+id/civContactImage"
        app:layout_constraintTop_toBottomOf="@id/tvTextLine2" />

    <TextView
        android:id="@+id/tvRepeat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawablePadding="5dp"
        android:gravity="center_vertical"
        android:text="Every 2nd Friday"
        android:textColor="#FF909090"
        android:textSize="12sp"
        app:layout_constraintEnd_toEndOf="@+id/tvTime"
        app:layout_constraintLeft_toLeftOf="@id/tvTextLine"
        app:layout_constraintStart_toStartOf="@id/tvTextLine"
        app:layout_constraintTop_toBottomOf="@id/tvTime" />

</android.support.constraint.ConstraintLayout>

希望对你有帮助!

【讨论】:

    【解决方案2】:

    这些更改可能会起作用:

    <ImageView
        android:id="@+id/ivCircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/bg_circle_win"
        app:layout_constraintBottom_toBottomOf="@+id/civContactImage"
        app:layout_constraintStart_toStartOf="@+id/civContactImage"
        tools:ignore="ContentDescription" />
    
    <ImageView
        android:id="@+id/ivReminderType"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        app:layout_constraintEnd_toEndOf="@+id/civContactImage"
        app:layout_constraintTop_toTopOf="@+id/civContactImage"
        tools:ignore="ContentDescription" />
    
    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/civContactImage"
        android:layout_width="42dp"
        android:layout_height="42dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    <ImageView
        android:id="@+id/icivCircleSmall"
        android:layout_width="15dp"
        android:layout_height="15dp"
        app:layout_constraintEnd_toEndOf="@id/civContactImage"
        app:layout_constraintRight_toRightOf="@id/civContactImage"
        app:layout_constraintBottom_toBottomOf="@id/civContactImage"
        tools:ignore="ContentDescription"/>
    
    <TextView
        android:id="@+id/tvTextLine"
        android:layout_width="wrap_content"
        android:layout_height="23dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:gravity="center_vertical"
        android:maxLines="2"
        android:textSize="18sp"
        app:layout_constraintEnd_toStartOf="@+id/civContactImage"
        tools:text="Line of Text" />
    
    <TextView
        android:id="@+id/tvTextLine2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:textSize="16sp"
        android:visibility="gone" />
    
    <TextView
        android:id="@+id/tvTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:drawablePadding="5dp"
        android:gravity="center_vertical"
        android:textColor="#FF909090"
        android:textSize="12sp"
        app:layout_constraintEnd_toStartOf="@+id/civContactImage"
        app:layout_constraintTop_toBottomOf="@+id/tvTextLine"
        tools:text="Wed, 01.05.2018 10:10" />
    
    <TextView
        android:id="@+id/tvRepeat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:drawablePadding="5dp"
        android:gravity="center_vertical"
        android:textColor="#FF909090"
        android:textSize="12sp"
        app:layout_constraintEnd_toStartOf="@+id/civContactImage"
        app:layout_constraintTop_toBottomOf="@+id/tvTime"
        tools:text="Every 2nd Friday" />
    

    我希望工作。祝你好运

    【讨论】:

    • 不,同样的问题 :-(
    • 删除所有父母的所有rtlltr 方向属性。它似乎工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2021-10-01
    • 2021-01-31
    • 2023-03-04
    相关资源
    最近更新 更多