RelativeLayout 中的两个 TextViews 正确响应 rtl locale
Two TextViews inside RelativeLayout with proper respond to rtl locale
如何在 RelativeLayout
中创建 2 TextViews
在 LTR
和 RTL
语言环境中看起来像这样。
(Table只是为了澄清我的意思,这不是我的问题的一部分)
LTR
╔════════════╦═══════════════════════════════════════════════════════════╗
║ txtView1 ║ txtView2 ║
╚════════════╩═══════════════════════════════════════════════════════════╝
RTL
╔═════════════════════════════════════════════════════════════╦══════════╗
║ txtView2 ║ txtView1 ║
╚═════════════════════════════════════════════════════════════╩══════════╝
目前我正在使用边距,但这似乎不对:
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView 1"
android:textColor="?attr/info_color"
android:textSize="13sp" />
<TextView
android:id="@+id/txtView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/txtView1"
android:text="TextView 2"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp" />
</RelativeLayout>
我无法使用setLayoutDirection
,minSdkVersion
低于17
我不确定这是否是您想要的,但您可以:
1 - 在 TextView1
.
中将 android:layout_width
设置为 wrap_content
2 - 将 TextView1
对齐到父级的开始
3 - 对齐 TextView1
末尾的 TextView2
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:text="TextView 1"
android:textSize="13sp" />
<TextView
android:id="@+id/txtView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignBaseline="@id/txtView1"
android:layout_toEndOf="@id/txtView1"
android:text="TextView 2"/>
</RelativeLayout>
这是结果:
LTR
RTL
编辑
如评论中所述,您可以使用 LinearLayout
:
<LinearLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<TextView
android:id="@+id/txtView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TextView 1"
android:textSize="13sp"
android:layout_weight="0.2"/>
<TextView
android:id="@+id/txtView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="0.8"
android:layout_alignBaseline="@id/txtView1"
android:text="TextView 2"/>
</LinearLayout>
以下代码似乎对我来说工作正常。
<LinearLayout
android:layoutDirection="locale"
android:textDirection="locale" //Works as expected when I set rtl or ltr
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Something"
android:layout_weight="2"
android:textDirection="inherit"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:text="or the other"
android:layout_weight="8"
android:textDirection="inherit"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>
如何在 RelativeLayout
中创建 2 TextViews
在 LTR
和 RTL
语言环境中看起来像这样。
(Table只是为了澄清我的意思,这不是我的问题的一部分)
LTR
╔════════════╦═══════════════════════════════════════════════════════════╗
║ txtView1 ║ txtView2 ║
╚════════════╩═══════════════════════════════════════════════════════════╝
RTL
╔═════════════════════════════════════════════════════════════╦══════════╗
║ txtView2 ║ txtView1 ║
╚═════════════════════════════════════════════════════════════╩══════════╝
目前我正在使用边距,但这似乎不对:
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView 1"
android:textColor="?attr/info_color"
android:textSize="13sp" />
<TextView
android:id="@+id/txtView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/txtView1"
android:text="TextView 2"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp" />
</RelativeLayout>
我无法使用setLayoutDirection
,minSdkVersion
低于17
我不确定这是否是您想要的,但您可以:
1 - 在 TextView1
.
android:layout_width
设置为 wrap_content
2 - 将 TextView1
对齐到父级的开始
3 - 对齐 TextView1
TextView2
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:text="TextView 1"
android:textSize="13sp" />
<TextView
android:id="@+id/txtView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignBaseline="@id/txtView1"
android:layout_toEndOf="@id/txtView1"
android:text="TextView 2"/>
</RelativeLayout>
这是结果:
LTR
RTL
编辑
如评论中所述,您可以使用 LinearLayout
:
<LinearLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1">
<TextView
android:id="@+id/txtView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TextView 1"
android:textSize="13sp"
android:layout_weight="0.2"/>
<TextView
android:id="@+id/txtView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="0.8"
android:layout_alignBaseline="@id/txtView1"
android:text="TextView 2"/>
</LinearLayout>
以下代码似乎对我来说工作正常。
<LinearLayout
android:layoutDirection="locale"
android:textDirection="locale" //Works as expected when I set rtl or ltr
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Something"
android:layout_weight="2"
android:textDirection="inherit"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<TextView
android:text="or the other"
android:layout_weight="8"
android:textDirection="inherit"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>