代码之家  ›  专栏  ›  技术社区  ›  AndroidEnthusiast

字符串资源中的特殊字符不会显示在警报对话框中(Android)

  •  1
  • AndroidEnthusiast  · 技术社区  · 7 年前

    很奇怪,但我注意到特殊的角色不会出现在对话中

    E、 g下面用xml定义的字符串

    <string name="some_string">A string which has stuff "In Quotation" indeed.</string>

    当在警报对话框中这样使用时

    val message = resources.getString(R.string.some_string)
    val builder = AlertDialog.Builder(context)
                .setMessage(message)
       builder.show()
    

    而不是显示为一个字符串,其中有东西“在引用” 仅在对话框上

    它显示为一个字符串,引用中确实有内容。没有“,”

    4 回复  |  直到 7 年前
        1
  •  2
  •   user8959091user8959091    7 年前

    写为:

    <string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
    
        2
  •  1
  •   Crammeur    7 年前

    例子 关于我在评论中所说的话。

    String message = getString(R.string.app_name);
    AlertDialog.Builder builder = new AlertDialog.Builder(this).setMessage(message);
    builder.show();
    

    XML格式

    <string name="app_name">\&quot;Mes Dépenses\&quot;</string>
    

    测试时间

    安卓api 19

    [更新]

    为什么是对话而不是其他我认为是因为合并在安卓系统。

    看这个 CharSequence

    A CharSequence is a readable sequence of char values. This interface provides uniform, read-only access to many different kinds of char sequences. A char value represents a character in the Basic Multilingual Plane (BMP) or a surrogate. Refer to Unicode Character Representation for details.

    XML allows the use of any of the Unicode-defined encodings, and any other encodings whose characters also appear in Unicode. XML also provides a mechanism whereby an XML processor can reliably, without any prior knowledge, determine which encoding is being used.[12] Encodings other than UTF-8 and UTF-16 are not necessarily recognized by every XML parser.

    AlertDialog setMessage

    CharSequence是接口,所以它们没有 toString() 他们必须使用 charAt() chars() 取决于api

    Android中的char使用ASCII检查这个 Integer.valueOf(char) returning ASCII value

    https://en.wikipedia.org/wiki/Unicode_symbols

    换句话说,他们必须跳过 " 因为他们认为是字符串concat。这就是为什么我认为我们需要 \

        3
  •  0
  •   Ionuț Popescu    7 年前

    如果你想拯救其他人:

    val message = resources.getString(R.string.some_string)
    message = message .replace("\"", "&quot;")
    val builder = AlertDialog.Builder(context)
                .setMessage(message)
    builder.show()
    

    如果要用xml编辑:

    <string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
    
        4
  •  0
  •   Aalap Patel    7 年前

    您可以从Html类中使用fromHtml方法,如下所示。对于超过24的API,您可以使用带标志的方法,如下所述。

    我已经用我的代码进行了测试,运行良好。希望有帮助。

    var dialogHeader = Html.fromHtml("&ldquo; " + "Awesome title text" + " &rdquo;", Html.FROM_HTML_MODE_COMPACT).toString()
    
    AlertDialog.Builder(this)
            .setMessage(dialogHeader)
            .show()
    

    注意:您可以使用 Html.fromHtml(string) 以及代替 Html.fromHtml(string, intFlag) 我的应用程序API>=24时使用的。