android - 如何强制包含 ltr 字符的 textView 在 rtl 环境中右对齐
问题描述
所有“线条”都使用相同的结构(宽度、高度、重力,...:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="30dp"
android:orientation="horizontal">
<TextView
android:id="@+id/labelMkt1"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="0.5"
android:gravity="center_vertical" // I also tried "center_vertical|start"
android:text="@string/report_mkt"
android:textColor="#000" /> <!-- force gravity start, textAlignment=textStart, did not work, useful for RTL layout with EN characters -->
<TextView
android:id="@+id/labelMkt2"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="@string/device_param_empty" />
</LinearLayout>
但是当 label1 包含英文字符(例如“MKT”)时,文本左对齐。
我尝试使用
android:gravity="center_vertical|start"
(尽管“开始”是默认设置)但没有帮助。我试图添加
android:textAlignment="textStart"
它并没有帮助。
如何强制 label1 与所有其他标签一样右对齐?
解决方案
android:textDirection="rtl"
无论文本是希伯来语还是英语,您都可以使用so,它将从您视图的右侧开始,并且在您更改语言时不会跳转到另一个方向。
注意-我认为这android:gravity
对您不起作用,因为希伯来语是 rtl 而英语是 ltr。
因此,当您放置重力 - 开始并且语言为英语时,您的文本将从视图的左侧开始。
使用工作示例进行编辑:
布局:
LinearLayout 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"
tools:context=".MainActivity">
<TextView
android:id="@+id/labelMkt1"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="0.5"
android:gravity="center_vertical"
android:text="@string/report_mkt"
android:textColor="#000"
android:background="@color/colorPrimaryDark"
android:textDirection="rtl" />
<TextView
android:id="@+id/labelMkt2"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"
android:background="@color/colorAccent"
android:gravity="center_vertical"
android:text="@string/device_param_empty"
android:textDirection="rtl" />
字符串资源:
<resources>
<string name="app_name">My Application</string>
<string name="report_mkt">this is english text</string>
<string name="device_param_empty">this is english text</string>
它在真实手机上的外观:
正如你所看到的,我的字符串也是英文的,一切正常,所以问题不在于有英文字符串。
推荐阅读
- javascript - 用户删除帐户时使用云功能删除 Firebase Storage 文件夹
- pandas - 如何合并(使用DataFrame)具有相同输入但顺序不同的两个数据集
- javascript - 如何将命令限制为特定角色?
- java - 如何在给定图中快速计算n个非重叠顶点对中的一个不会在边上的概率
- sql - 使用表变量和连接获取输出的 SQL 查询
- php - 如何更改 WordPress 管理区域中的默认 Dashicon?
- html - CSS 打字机效果在重复之间产生延迟
- intersection - 连续的 char 的交点
- pip - 如何将包添加到虚拟环境?
- vue.js - 我可以在 VUE 的单个文件组件中定义一个组件吗?