我在我的strings.xml文件中存储SQL查询,我想用来String.Format
在代码中构建最终的字符串.该SELECT
语句使用类似的东西,如下所示:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'
Run Code Online (Sandbox Code Playgroud)
为了格式化我用%1 $ s替换'something',它变成:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'
Run Code Online (Sandbox Code Playgroud)
我用反斜杠来逃避单引号.但是我无法逃脱%号.
如何在strings.xml文件中包含like语句?
在我的Android应用程序中,我将使用国际化来实现我的字符串.我的语法和句子用不同语言构建的方式有问题.
例如:
"5分钟前" - 英文
"vor 5 Minuten" - 德语
我可以在strings.xml中执行以下操作吗?
<string name="timeFormat">{0} minutes ago</string>
Run Code Online (Sandbox Code Playgroud)
然后有些神奇的
getString(R.id.timeFormat, dynamicTimeValue)
Run Code Online (Sandbox Code Playgroud)
此行为也将解决不同单词顺序的其他问题.
我想在strings.xml文件中引用另一个字符串中的字符串,如下所示(特别注意"message_text"字符串内容的结尾):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="button_text">Add item</string>
<string name="message_text">You don't have any items yet! Add one by pressing the \'@string/button_text\' button.</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的语法,然后文本打印出"@ string/button_text"作为明文.不是我想要的.我想要打印消息文本"你还没有任何项目!按"添加项目"按钮添加一个项目."
有没有任何已知的方法来实现我想要的?
RATIONALE:
我的应用程序有一个项目列表,但是当该列表为空时,我会显示"@android:id/empty"TextView.TextView中的文本是通知用户如何添加新项目.我想让我的布局变得傻瓜变化(是的,我是个傻瓜:-)
我通过以下方式使用setText()设置文本.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
Run Code Online (Sandbox Code Playgroud)
在此首先一个是使用简单,二一个是设置文本与文本格式.
Android Studio非常有趣,我使用了Menu Analyze -> Code Cleanup
,我得到了以上两行的建议.
不要连接用setText显示的文本.使用带占位符的资源字符串.少...(Ctrl + F1)
调用TextView#setText时:
- 永远不要调用Number#toString()来格式化数字; 它不会正确处理分数分隔符和特定于语言环境的数字.请考虑使用具有适当格式规范(%d或%f)的String#格式.
- 不要传递字符串文字(例如"Hello")来显示文本.硬编码文本无法正确翻译为其他语言.请考虑使用Android资源字符串.
- 不要通过连接文本块来构建消息.此类消息无法正确翻译.
我能为此做些什么?任何人都可以帮助解释这是什么,我该怎么办?
如果我的strings.xml中有以下多个ressource:
<plurals name="item_shop">
<item quantity="zero">No item</item>
<item quantity="one">One item</item>
<item quantity="other">%d items</item>
</plurals>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法向用户显示结果:
textView.setText(getQuantityString(R.plurals.item_shop, quantity, quantity));
Run Code Online (Sandbox Code Playgroud)
它适用于1及以上,但如果数量为0,那么我看到"0项".是否只有阿拉伯语支持"零"值,正如文档似乎表明的那样?或者我错过了什么?
问题
我希望能够在Android XML代码中执行类似的操作:
<string name="title">@string/app_name test</string>
<string name="title2">@string/app_name @string/version_name</string>
Run Code Online (Sandbox Code Playgroud)
关于第一行代码编译器显示此错误
找不到与给定名称匹配的资源(在'title'处,值为'@ string/app_name test')
关于第二行代码编译器显示此错误
找不到与给定名称匹配的资源(在'title2'处,值为'@ string/app_name @ string/version_name')
问题
有人知道如何在Android XML中连接多个字符串吗?
基本原理
在许多代码位(在本例中为XML)中复制变量值是不好的做法.
我将详细介绍如何在android XML中连接多个字符串?最后有评论
For clarity, Its works:
<string name="title">@string/app_name</string>.
- AndrzejDuś
我做了我自己的例子,但它不起作用.所以确实安杰错误或我做错了什么在我的代码.
R.strings.bbb
应该包含"bbb aaa"
但不包含"bbb aaa"
它"bbb @strings/aaa"
<string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>
Run Code Online (Sandbox Code Playgroud)
查询:
是否可以仅在xml中进行一些串联,而不更改源代码?
我不想在代码中编辑的原因,因为我使用了这个字符串 xml/preferences.xml
例如:
<ListPreference android:key="key_bbb" android:title="@string/bbb"
....
如果你知道我的意思,这里没有可能使用这样的东西
String title = res.getString(R.string.title, appName);
Run Code Online (Sandbox Code Playgroud) 这是什么意思?
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
Run Code Online (Sandbox Code Playgroud)
它可以在Android项目Strings.xml
的resources文件夹values
中看到.
我有android应用程序和资源中的这个字符串:
<string name="create_group_select_people">Select up to %1$d people!</string>
Run Code Online (Sandbox Code Playgroud)
这是从片段调用的:
Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
Format string 'create_group_select_people' is not a valid format string so it should not be passed to String.format
Run Code Online (Sandbox Code Playgroud)
我无法理解什么是错的?当我启动应用程序时 - 它按字面意思显示"选择最多%1美元的人!"
我想在我的Android应用程序中集成表情符号.因此,我查找了utf-8符号的十六进制代码,并将以下内容添加到我的string.xml文件中:
<string name="thumbsup">Perfect <node>👍👍</node></string>
Run Code Online (Sandbox Code Playgroud)
这应该导致Perfect
.但是,当呼叫活动尝试显示时,我的应用程序崩溃了:
JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf0
Run Code Online (Sandbox Code Playgroud)
不是特别完美;)