字符串资源中的特殊字符不显示在警报对话框中 (Android)
Special characters in a string resource don't show up in Alert Dialog (Android)
一个奇怪的,但我刚刚注意到对话框中没有显示特殊字符
例如 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()
而不是显示为包含 "In Quotation" 内容的字符串 仅在对话框中
它显示为一个字符串,其中确实包含 In Quotation 的内容。没有“”
写成:
<string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
如果要保存其他字符串:
val message = resources.getString(R.string.some_string)
message = message .replace("\"", """)
val builder = AlertDialog.Builder(context)
.setMessage(message)
builder.show()
如果您想在 xml 中编辑:
<string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
示例 我会在评论中说的话。
String message = getString(R.string.app_name);
AlertDialog.Builder builder = new AlertDialog.Builder(this).setMessage(message);
builder.show();
XML
<string name="app_name">\"Mes Dépenses\"</string>
测试于
java-7
Android api 19
[更新]
为什么是对话而不是其他我认为是因为在 android.
中合并
看到这个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.
CharSequence 是接口,所以他们没有 toString()
他们必须使用
charAt()
或 chars()
取决于 api
Android 中的字符使用 ASCII 检查此
https://en.wikipedia.org/wiki/Unicode_symbols
换句话说,他们必须跳过 "
字符,因为他们认为是字符串连接。这就是为什么我认为我们需要添加 \
您可以像这样使用 Html class 中的 fromHtml 方法。对于 API 超过 24 个,您可以使用带有标志的方法,如下所述。
我已经用我的代码进行了测试并且工作正常。希望对你有帮助。
var dialogHeader = Html.fromHtml("“ " + "Awesome title text" + " ”", Html.FROM_HTML_MODE_COMPACT).toString()
AlertDialog.Builder(this)
.setMessage(dialogHeader)
.show()
注意:您也可以使用 Html.fromHtml(string)
代替我在我的应用中使用的 Html.fromHtml(string, intFlag)
API >= 24.
一个奇怪的,但我刚刚注意到对话框中没有显示特殊字符
例如 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()
而不是显示为包含 "In Quotation" 内容的字符串 仅在对话框中
它显示为一个字符串,其中确实包含 In Quotation 的内容。没有“”
写成:
<string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
如果要保存其他字符串:
val message = resources.getString(R.string.some_string)
message = message .replace("\"", """)
val builder = AlertDialog.Builder(context)
.setMessage(message)
builder.show()
如果您想在 xml 中编辑:
<string name="some_string">A string which has stuff \"In Quotation\" indeed.</string>
示例 我会在评论中说的话。
String message = getString(R.string.app_name);
AlertDialog.Builder builder = new AlertDialog.Builder(this).setMessage(message);
builder.show();
XML
<string name="app_name">\"Mes Dépenses\"</string>
测试于
java-7 Android api 19
[更新]
为什么是对话而不是其他我认为是因为在 android.
中合并看到这个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.
CharSequence 是接口,所以他们没有 toString()
他们必须使用
charAt()
或 chars()
取决于 api
Android 中的字符使用 ASCII 检查此
https://en.wikipedia.org/wiki/Unicode_symbols
换句话说,他们必须跳过 "
字符,因为他们认为是字符串连接。这就是为什么我认为我们需要添加 \
您可以像这样使用 Html class 中的 fromHtml 方法。对于 API 超过 24 个,您可以使用带有标志的方法,如下所述。
我已经用我的代码进行了测试并且工作正常。希望对你有帮助。
var dialogHeader = Html.fromHtml("“ " + "Awesome title text" + " ”", Html.FROM_HTML_MODE_COMPACT).toString()
AlertDialog.Builder(this)
.setMessage(dialogHeader)
.show()
注意:您也可以使用 Html.fromHtml(string)
代替我在我的应用中使用的 Html.fromHtml(string, intFlag)
API >= 24.