Android TextView 在从右到左的设备上右对齐

2023-12-22

我正在编写一个以希伯来语显示的应用程序,为此我右对齐 TextView 的文本。 在 Nexus 设备上进行开发时,一切都运行良好,并且使用 TextView 的 android:gravity="right" 来按应有的方式显示文本。 当我在运行自定义 ROM 的本地移动运营商设备(以色列)上运行相同的应用程序时,所有设置为gravity=“right”的 TextView 小部件都显示为好像设置为gravity=“left”。如果我去把重力改变到左边(你猜对了..)它会向右对齐。

我尝试使用代码并使用设备配置本身将设备的默认区域设置更改回美国英语。没有任何帮助。 我正在开发的运营商设备是 Galaxy SII。

在我看来,创建 ROM 的人只是更改了对齐值,现在右意味着左,左意味着右。 ROM是三星官方ROM。

有人遇到过这个问题吗?有什么解决方案的想法吗?

我已经尝试过的: 1. 从设置菜单更改设备区域设置。 2. 以编程方式更改设备区域设置。 3、强制布局文件中的根Layout为左/右layout_gravity/gravity

目前唯一有效的是将 TextView 的重力更改为左侧,这意味着它停止在 Nexus 等全球设备上工作......


回答我自己的问题。

查遍之后我没有找到答案。因为 ROM 是为居住在以色列并讲希伯来语的人定制的,所以宽度 MATCH_PARENT TextView 内的对齐方式似乎被翻转了。意思是,左对齐意味着右对齐,右对齐意味着左对齐。 改变这一点的唯一方法是将 TextView 与 WRAP_CONTENT 一起使用,并将 TextView 本身与其父级内部的右侧对齐。 因为我已经编写了应用程序和所有屏幕布局,所以我不想更改所有内容。 因此,我所做的是实现一个自定义控件,它将 TextView 包装在 LinearLayout 内,并将其公开以方便从外部使用。 这样,MATCH_PARENT 将影响 LinearLayout,而控件将负责将包装的 TextView 向右对齐。

方法如下:

首先,控件类本身(HebrewTextView.java):

public class HebrewTextView extends LinearLayout
{
private TextView mTextView;

public HebrewTextView(Context context)
{
    super(context);
    init(null);
}

public HebrewTextView(Context context, AttributeSet attrs)
{
    super(context, attrs);
    init(attrs);
}

public TextView getTextView()
{
    return mTextView;
}

private void init(AttributeSet attrs)
{       
    mTextView = new TextView(getContext());
    LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
    lp.gravity = Gravity.RIGHT; 
    mTextView.setLayoutParams(lp);
    mTextView.setGravity(Gravity.CENTER_VERTICAL);

    addView(mTextView);

    if(attrs!=null)
    {
        TypedArray params = getContext().obtainStyledAttributes(attrs, R.styleable.HebrewTextView);
        mTextView.setText(params.getString(R.styleable.HebrewTextView_android_text));
        mTextView.setTextColor(params.getColor(R.styleable.HebrewTextView_android_textColor, Color.WHITE));
        mTextView.setTextSize(params.getDimension(R.styleable.HebrewTextView_android_textSize, 10));
        mTextView.setSingleLine(params.getBoolean(R.styleable.HebrewTextView_android_singleLine, false));
        mTextView.setLines(params.getInt(R.styleable.HebrewTextView_android_lines, 1));                     
        params.recycle();
    }               
}
}

Values/attrs.xml 下的控件 XML 属性。请注意,自定义属性与 TextView 属性匹配,因此我不必更改布局文件:

注意:这些是我需要的属性,如果您要使用更多属性,只需添加到 XML 并在类的 init() 中读取它即可。

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <declare-styleable name="HebrewTextView">
    <attr name="android:text"/>
    <attr name="android:textColor"/>
    <attr name="android:lines"/>
    <attr name="android:textSize"/>
    <attr name="android:singleLine"/>                                    
</declare-styleable>
</resources>

完成之后,我所要做的就是运行有问题的布局,并将 TextView 替换为希伯来文本视图,如果它是代码引用的 TextView,则更改转换。 getTextView() 方法是在控件类中定义的,以便代码中更改文本和/或其他 TextView 属性的部分在添加 .getTextView() 后缀后将起作用。

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android TextView 在从右到左的设备上右对齐 的相关文章

随机推荐

  • 配方/成分/测量/数量的数据库架构

    我正在创建一个食谱应用程序来帮助我妻子实现她的蛋糕爱好 这个想法是创建一个食谱数据库来保存她所有的蛋糕食谱 每个食谱都有多种成分 每种成分都有一个测量值 克 毫升 茶匙等 然后是数量 我了解如何创建 食谱 和 成分 表 以及如何将这两个表与
  • 按降序对 int 数组进行排序[重复]

    这个问题在这里已经有答案了 可能的重复 按降序对基本类型数组进行排序 https stackoverflow com questions 215271 sort arrays of primitive types in descending
  • 使用 Hangout api 进行视频通话 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 你好 我有一个 Android 应用程序 我想要其中的视频聊天功能 我在互联网上搜索了很多 但找不到任何有效且简单的解决方案 然后我找
  • 如何通过切换(“慢”)使其更平滑

    我有以下代码可以工作 但在每个切换操作结束时它变得有点跳动 如果我切换段落会更流畅吗 我正在尝试获取该段落 但我不知道该怎么做 div div class toppara p Conte p div div
  • 从 Express 中间件中排除路由

    我有一个节点应用程序 就像防火墙 调度程序一样位于其他微服务前面 它使用如下所示的中间件链 app use app lookup app use timestamp validator app use request body app us
  • 如何在验证消息 Laravel 5.2 中获取数组索引

    我放入的这些数组Laravel Validator作为参数 item gt string rules item string gt Item number index is not string messages 我希望有index num
  • 如何使用 Spring Boot 注册 servlet?

    这段代码不起作用 我有一个 web xml 需要翻译成 spring boot
  • 300GB Postgis 表索引速度慢

    我正在将大约 300GB 的等高线数据加载到 postgis 表中 为了加快这个过程 我读到首先加载数据 然后创建索引是最快的 加载数据只花了大约2天的时间 但现在我已经等待索引大约30天了 它仍然没有准备好 查询是 create inde
  • 如何使用 React Native Agora 显示传入视频通话

    我想在我的 React Native 应用程序中添加实时通话功能 我正在使用agora和socket io来使其实时 并且当应用程序位于前台时它工作正常 但是当应用程序关闭时我被卡住了 因为应用程序关闭时套接字不起作用我想像来电屏幕一样显示
  • 您可以将图像分配给 border-right 吗?

    我正在 html 和 css 中制作一个导航菜单 但我希望每个导航项的右侧边框是一个图像 I tried border right url image jpg 但这没有用 我该怎么做 您可以使用背景图像 然后将背景图像放置在每个元素的右侧
  • 在java中,除了遵循if-else梯子之外,还有什么更好的选择呢?

    情况 我正在检查文件名 文件名存储在String变量称为str并根据入住条件if语句我正在设置一个名为的变量的值mailType if str contains template if str contains unsupported ma
  • Java -> Scala,集合上的性能

    在Java中 根据集合的用法 我们不使用相同的实现 即ArrayList vs LinkedList 来自 Java 背景 有人可以告诉我关于 Scala 集合和性能注意事项我应该了解什么吗 看来 Scala List 的不可变版本是某种不
  • 在 Angular 中的兄弟组件之间传递数据

    Above image depicts my Angular 2 application Main component has two child components FromComponent and ToComponent FromC
  • 通过 PubSubHubbub 推送新直播的通知

    我希望收到有关 YouTube 频道的新直播的通知 如中所述YouTube v3 推送通知 https developers google com youtube v3 guides push notifications我已经设置了一个公共
  • 在 MATLAB 中向量化线性方程组的解

    Summary 本问题涉及线性回归计算算法的改进 我有一个 3D dlMAT 表示在不同曝光时间拍摄的同一场景的单色照片的数组 向量IT 从数学上讲 沿第三维的每个向量dlMAT代表需要解决的单独线性回归问题 需要估计其系数的方程的形式为
  • 为什么 * 不被视为数学符号? [复制]

    这个问题在这里已经有答案了 我正在回答这个question https stackoverflow com questions 39515852 what exactly is classified as a symbol in c 395
  • 创建多个动态图表

    我正在开发一个网络应用程序 MEAN stack 我正在尝试使用 ChartJS 圆环图 但我需要它完全动态 首先 图表的数量是动态的 每个图表代表其他东西 所以有时它会是 3 个 有时是 20 个 第二 我希望我能够访问每个图表以进行实时
  • 有人有使用 NHibernate 创建偶尔连接的浏览器应用程序的经验吗?

    我们需要使基于 ASP NET NHibernate 浏览器的企业应用程序能够在连接到客户服务器或从客户服务器断开连接时正常运行 有人这样做过吗 如果是这样 你是怎么做到的 技术 架构等 背景 我们开发和销售基于浏览器的企业应用程序 供建筑
  • 如何确定字符串开头是两个还是一个数字?

    我怎样才能确定什么数字 带有随意的位数 位于字符串的开头 一些可能的字符串 1123 http example com 2 daas 应该返回 1123 和 2 使用正则表达式 using System Text RegularExpres
  • Android TextView 在从右到左的设备上右对齐

    我正在编写一个以希伯来语显示的应用程序 为此我右对齐 TextView 的文本 在 Nexus 设备上进行开发时 一切都运行良好 并且使用 TextView 的 android gravity right 来按应有的方式显示文本 当我在运行