草庐IT

Android RTL 文本方向

coder 2023-12-10 原文

我试图在我的应用程序中支持 RTL 语言环境,但是我遇到了以下问题。现在我说问题,但由于我不熟悉 RTL 语言环境,它甚至可能不是问题,所以就这样吧。

下面是 3 个 TextView 。请注意,以下输出是在通过开发选项强制启用 RTL 的情况下生成的。

用英语 LTR 测试

强制英语 RTL 测试

我发现它没有右对齐很奇怪,即使我说 android:gravity="start" 就像它如何与填充和边距等一起工作一样。所以我看了其他答案遇到了 android:textDirection="locale"

使用文本方向语言环境强制进行英语 RTL 测试

现在这在 LTR 和 RTL 上都正确镜像,但后来我注意到标点符号出现以下行为。这是否正确引起了人们的注意,因为我正在与强制 RTL 的 Google Play 商店、Facebook 和 Whats App 进行比较,但在查看带有标点符号的段落时我没有看到这一点,这让我相信我做错了什么。

完整布局代码

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:text="@string/test_one"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="start"
        android:text="@string/test_two"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="start"
        android:text="@string/test_three"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

</LinearLayout>

其他代码

下面是我的manifest文件中设置的

 android:supportsRtl="true"

这是我的字符串

<string name="test_one">Good Job. You did well!</string>
<string name="test_two">3 hours ago</string>
<string name="test_three">Select Option:</string>

请原谅这听起来多么幼稚,并赐教!我希望提供舒适的 RTL 支持!

最佳答案

android:textDirection="locale" 添加到 TextViewandroid:supportsRtl="true" 即可。但是,textDirection="locale" 更改方向以将区域设置更改为 enfa 或者 ar。 (取决于设备的语言)

要清楚一点,它工作正常因为您在 TextView 中的文本是 LTR 并且您使用了 RTL 方向,如您所见,它使方向 RTL 并且没有问题。此外,使用 android:gravity="start" 可能会强制它从头开始使用,我想,它将从 LTR 开始。 (我建议删除 android:gravity="start" 并让 Android(为了设备的语言)决定哪个是最好的)

因此,要测试它是否有效,您可以将文本设置为阿拉伯语或波斯语,如下所示:

android:text="این یک تست است"

如果它从 RTL 开始并使用 "این",那么它会按预期工作。

关于Android RTL 文本方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524844/

有关Android RTL 文本方向的更多相关文章

  1. DolphinScheduler2.0版本升级3.0版本方案 - 2

    1.升级背景因项目需要使用数据质量模块功能,可以为数仓提供良好的数据质量监控功能。故要对已有2.0版本升级到3.0版本以上,此次选择测试了3.0.1和3.1.1两个版本,对进行同数据等任务调度暂停等操作测试,最后选择3.0.1版本原因:1.3.1.1在测试sql任务时,同时启动上百sql任务时,会出现sql任务报错,导致大量任务无法正常运行,询问社区大佬,这是DS本身bug导致,虽然此现象在3.0.1也有出现,不过出现几率较小。2.DS3.0.1以上版本zookeeper的依赖版本进行了更新,查看驱动版本是3.8版本。我们生产不打算升级zk,故选择使用3.0.1版本。此版本测试还是比较稳定的,

  2. anaconda 创建虚拟环境、激活,使用的基本方法及安装包的基本方法 - 2

    第一步打开AnacondaPrompt可以看到这里是base环境。第二步我们现在要创建一个新的虚拟环境,名叫test,且python版本为3.8在安装过程中会出现下面这个选项,输入y就好了创建成功如下图所示!hiahia!我们已经学会如何创建新的环境了!没错!我们非常棒!下面我们就看看,如何切换到我们新创建的环境中去吧!第三步,激活环境test输入condaactivatetest(激活环境test)可以看到,环境已经从base变到了test环境已经创建好了,也已经切换到新的环境中了,但是在新环境中安装我们所需要的包之前,我们确定安装的包的版本,找到与python3.8所匹配的包的版本,在进行

  3. 音乐速度与节拍估计(一)基本方法 - 2

    转载自我的个人网站https://wzw21.cn/2022/02/04/tempo-baseline/目录使用Librosa库对音乐速度、节拍进行估计的基本方法基本设置时频特征(Mel-Spectrogram)中层特征(SpectralFlux)速度估计(Autocorrelation)节拍跟踪(DynamicProgramming)使用Librosa库对音乐速度、节拍进行估计的基本方法参考:https://tempobeatdownbeat.github.io/tutorial/ch2_basics/baseline.html基本设置importlibrosaimportmatplotli

  4. C++ 继承,隐藏的基本方法 - 2

    我有一个简单的C++基类、派生类示例。//Base.hpp#pragmaonceclassBase{public:virtualfloatgetData();virtualvoidsetData(floata,floatb);virtualvoidsetData(floatd);protected:floatdata;};//Base.cpp#include"stdafx.h"#include"Base.hpp"floatBase::getData(){returndata;}voidBase::setData(floata,floatb){setData(a);}voidBase::

  5. ios - 检测 UITextView 文本方向 - 2

    我在我的应用程序中同时支持从左到右和从右到左。如何检测UITextView/UITextField中的文本方向?我无法使用设备的区域设置,因为用户可以使用多个键盘,这些键盘的语言具有不同的读/写方向。我想UITextInputTraits也没有用,因为Apple的文档说它只控制额外的键盘按钮,而不是带字母的按钮。有什么想法吗? 最佳答案 查看有关UITextInput的文档:下面的方法将返回文本的方向。funcbaseWritingDirection(forposition:UITextPosition,indirection:UI

  6. objective-c - 使用 OpenCV,如何在执行 OCR 之前检测文本方向? - 2

    我在iOS应用程序中使用OpenCV。我想对一些文本执行OCR,但我首先需要确定它的方向。我如何在OpenCV中做到这一点? 最佳答案 我不确定如果不在Objective-C中提供OCR是否可以回答这个问题——如果不使用OCR库,这很难在几行文本中完成。好吧,20年前,我编写了一个OCR系统(没有使用任何OCR库)来实时读取银行支票。顺便还验证了手写签名。检查方向的问题很严重,因为支票可以(由运算符(operator))随机插入小型机动银行支票扫描仪。由于所有银行都使用不同的页面布局和装饰,唯一不依赖磁性墨水(扫描仪未检测到)的方向

  7. 图像噪声、去噪基本方法合集(Python实现) - 2

    文章目录前言本文主要参考冈萨雷斯的数字图像处理(第4版),介绍图片中一些常见的噪声形式和常用的去噪方法,并且给出相应滤波方法的实现代码。一、噪声分类1、高斯噪声2、泊松噪声3、椒盐噪声4、瑞利噪声5、爱尔兰(伽马)噪声6、均匀噪声二、去噪方法1、均值滤波1.1算术平均滤波1.2几何均值滤波1.3谐波平均滤波2、统计排序滤波2.1中值滤波2.2最大值和最小值滤波2.3中点滤波2.4修正阿尔法均值滤波总结参考文献:前言本文主要参考冈萨雷斯的数字图像处理(第4版),介绍图片中一些常见的噪声形式和常用的去噪方法,并且给出相应滤波方法的实现代码。如果要使用本文代码,建议在JupyterNotebook环

  8. java - 如何找出 java 中依赖于语言环境的文本方向? - 2

    当我编写格式和解析引擎时,我想知道-给定一个j.u.Locale,如果一般文本方向是从右到左(字母字符)。我看到的是:1.)Character#getDirectionality(char)这需要了解要解析的具体字符,由于可能存在填充字符,这并不总是那么容易。2.)java.awt.ComponentOrientation#getOrientation(Locale)这个方法对我来说有两个问题。首先,我不想依赖awt或其他gui库(预计以后可能对Java进行模块化)。其次,也是更重要的一点:OpenJDK和Android中此方法的实现仅使用一种非常简单的方法,即:如果语言是(ar,fa

  9. java - 强制 LeadingMarginSpan2 的文本方向 - 2

    我正在按照建议使用LeadingSpanMargin2设置我的TextView样式,以便它围绕Image流动,问题是我的文本set是动态的,可以是rtl或ltr。我尝试了所有我能想到的方法来修复leadingMargin,以便它在两种情况下都在右或左,但无济于事。此外,我已经尝试过在github中发布的FlowTextView小部件,但它在rtl情况下效果不佳,所以请不要建议。非常感谢。这是我使用的代码,这是在另一个答案中建议的:publicvoidsetFlowText(CharSequencetext,intwidth,intheight,TextViewmessageView){

  10. Android RTL 文本方向 - 2

    我试图在我的应用程序中支持RTL语言环境,但是我遇到了以下问题。现在我说问题,但由于我不熟悉RTL语言环境,它甚至可能不是问题,所以就这样吧。下面是3个TextView。请注意,以下输出是在通过开发选项强制启用RTL的情况下生成的。用英语LTR测试强制英语RTL测试我发现它没有右对齐很奇怪,即使我说android:gravity="start"就像它如何与填充和边距等一起工作一样。所以我看了其他答案遇到了android:textDirection="locale"。使用文本方向语言环境强制进行英语RTL测试现在这在LTR和RTL上都正确镜像,但后来我注意到标点符号出现以下行为。这是否正

随机推荐