我有资源字符串:
<string name="address">Address</string>
<string name="city">City</string>
<string name="country">Country</string>
<string name="pincode">Pincode</string>
在我的应用程序中,我在很少的地方单独使用这些字符串,在很少的地方我通过冒号继承它们。
我不知道要创建另外四个资源字符串:
<string name="address_with_colon">Address: </string>
<string name="city_with_colon">City: </string>
<string name="country_with_colon">Country: </string>
<string name="pincode_with_colon">Pincode: </string>
现在要实现这一点,我必须用冒号连接我的资源字符串。我知道这很简单,虽然我可以在我的活动类中编写java代码。但我想要的是在我的布局文件中进行连接
问题:布局文件中是否可以进行字符串连接?
这是我必须执行连接的地方:
android:text="concatenation_if_possible"
答案 0 :(得分:3)
问题:布局文件中是否可以进行字符串连接?
据我所知,没有。
一种解决方案是使用@DIVA之前已回答的内容。
另一种可能的解决方案是创建一个自定义视图,扩展TextView(或您想要实现此目的的视图)并创建一个自定义属性custom:concatenate
,它接收字符串引用并自动执行连接。恕我直言,我认为这是最干净的方法。
在代码中看起来像这样:
<com.whatever.ConcatenateTextView
android:text="@string/whatever"
custom:concatenate="@string/second_string"/>
或者......你可以使用Drawables的强大功能创建一个自定义的TextDrawable(this post中的@Devunwired很好地解释了它,并在Github中具体实现了它。)
复制@Devunwired在其帖子中所说的内容:
通过这个类,文本现在可以成为Drawable世界的一部分,这意味着它不仅可以在您通常放置图像的地方单独设置,还可以与其他Drawable一起放在容器中,如StateListDrawable或动画喜欢TransitionDrawable和ClipDrawable。在许多情况下,我们可以使用它来完成一项工作,否则需要多个视图或复合控件才能实现给定的视觉效果;因此,它可以减少视图层次结构中的开销。
这与我之前解释的自定义TextView(或您想要使用的任何视图)相结合,为您提供了一个非常强大的选项。再次复制@Devunwired在帖子中写道的例子:
ImageView mImageOne;
TextDrawable d = new TextDrawable(this);
d.setText("SAMPLE TEXT\nLINE TWO");
d.setTextAlign(Layout.Alignment.ALIGN_CENTER);
mImageOne.setImageDrawable(d);
如果您需要更多帮助,请在评论中告诉我,我很乐意更新答案!
答案 1 :(得分:3)
使用XML实体,可以在XML文件中使用相同的多个位置字符串:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "MrQuery">
<!ENTITY author "Oded">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
我使用了这个答案:dynamic String using String.xml?
答案 2 :(得分:1)
你可以这样:
<string name="meatShootingMessage">You shot %1$d pounds of meat!</string>
String strMeatMsg = String.format(strMeatFormat, ":");
textview.setText(strMeatMsg);
答案 3 :(得分:1)
不,当直接从布局文件中引用这些字符串时,您无法将多个字符串资源连接成一个字符串。
XML布局文件只是Android构建用户界面的指令模板,您应该将它们视为一种更清晰,更有条理的生成UI的方式,而不是使用在布局中手动创建和定位视图的Java类。话虽这么说,你可以用布局文件做什么限制,其中一个能够从每个视图引用单个字符串资源,这意味着你不能做更复杂的事情,包括将几个字符串连接成一个。
答案 4 :(得分:0)
您可以使用我创建的这个插件来做到这一点:https://github.com/LikeTheSalad/android-string-reference它可以合并所有您想要的字符串,并在构建时生成最终的XML字符串,您可以在任何地方引用该字符串。您添加的其他手动字符串。
对于您的情况,您可以执行以下操作:
<string name="address">Address</string>
<string name="city">City</string>
<string name="country">Country</string>
<string name="pincode">Pincode</string>
<string name="template_address_with_colon">${address}: </string>
<string name="template_city_with_colon">${city}: </string>
<string name="template_country_with_colon">${country}: </string>
<string name="template_pincode_with_colon">${pincode}: </string>
然后该工具将生成:
<string name="address_with_colon">Address: </string>
<string name="city_with_colon">City: </string>
<string name="country_with_colon">Country: </string>
<string name="pincode_with_colon">Pincode: </string>
无论何时您决定更改模板或值字符串,该插件都会使生成的字符串保持更新。在回购页面上的更多信息。