【问题标题】:negative number within RTL AlertDialogRTL AlertDialog 中的负数
【发布时间】:2019-03-06 14:29:52
【问题描述】:

使用以下资源:

ltr: <string name="err_field_range_hint_f">Possible values: [%1$.0f .. %2$.0f]</string> 
rtl: <string name="err_field_range_hint_f">ערכים אפשריים:
   [%2$.0f .. %1$.0f]</string>  

在以下代码中:

 _AlertDialog = new AlertDialog.Builder(this).
  setTitle(getString(R.string.title))                             
  .setMessage(getString(R.string.err_field_range_hint_f, valLow, valHigh) ) 
  .setPositiveButton(getString(R.string.ok), null)
  .show();

我收到的是[25- .. 100] 而不是[-25 .. 100]

我通过在 EditText 字段中强制 LTR 解决了布局中的类似问题,使用:

android:inputType="numberSigned|numberDecimal" 
android:textDirection="ltr"

但是如何在 AlertDialog.Message 中对特定“单词”(或数字)强制 LTR?

注意:我在 here 中看到了一个解决方案,但我更喜欢 android 来处理格式化数字...

【问题讨论】:

    标签: android right-to-left


    【解决方案1】:

    我不确定你想收到

    而不是

    无论如何,最简单的解决方法是插入 Unicode BIDI 覆盖标记,例如LRO:

    <string name="err_field_range_hint_f">ערכים אפשריים:
        \u202D[%2$.0f .. %1$.0f]\u202C;</string>  
    

    【讨论】:

    • \u202D、\u202C 与 U+200E、U+200F 有什么区别? stackoverflow.com/a/30415888/262923
    • 如果您询问 \uXXXXU+XXXX - 这些只是不同的符号。 Android XML 支持前者。也许你也可以使用其他符号。
    • 对于不同 Unicode 标记的行为,Left-to-Right Mark (LRM) \u200E 是一个不可见字符,相当于字母 A。它不会更改文本字段的“段落顺序”或android:textDirection。 LRO 字符开始一个“跨度”,几乎就像文本字段中的android:textDirection="ltr"
    【解决方案2】:

    您可以在警报对话框中找到“消息”文本视图,然后应用您在编辑文本上使用的相同方法来纠正 LTR 问题。

    考虑这个 SO 答案以找到内部文本视图:

    https://stackoverflow.com/a/35808187/3339597

    【讨论】:

    • 我可以将内部消息拆分成几个文本视图吗? “ערכים אפשריים:”是 RTL,但“[%2$.0f .. %1$.0f]”是 LTR?
    • 我不知道在单个文本视图中拆分文本行为的任何方法。您可以使用多个文本视图创建自己的自定义对话框,每个片段一个。要创建自定义对话框,请访问此处:stackoverflow.com/q/13341560/3339597
    猜你喜欢
    • 2023-01-01
    • 2017-01-21
    • 2016-12-19
    • 2012-07-12
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多