在Android的XML布局中使用带有占位符的字符串

7
我有一个包含占位符的字符串,例如:

```

<string name="str_1">Hello %s</string>

我希望在xml布局中使用android:text="@string/str_1"来作为占位符,有没有办法在xml布局中使用它来填充占位符?提前感谢您的帮助。我已经知道java/kotlin中的String.format(str,str...),但我想在不使用数据绑定的情况下在xml布局中使用它。

1
使用数据绑定来使用字符串占位符:https://medium.com/@ubuntudroid/using-string-placeholders-with-data-binding-394615354464 - Rahul
尝试以下链接会对您有所帮助:https://dev59.com/d3A65IYBdhLWcg3wvhXi - Alok Singh
3
你需要从某处获取"%s"的值,而 DataBinding 是我能想到的最符合 "xml" 格式的方法来实现它。 - PPartisan
2
android:text="@{@string/generic_name(user.name)}",你不觉得 android:text="@{@string/generic_name(Hello World)}" 或者 @{String.format(@string/Hello, Hello World)} 你可以使用数据绑定来实现这个,Hello world 在反引号内。 - Rahul
@Rahul,PPartisan..是的,我了解数据绑定..但我想知道它是否可行。无论如何,谢谢。 - SimpleCoder
显示剩余3条评论
3个回答

6
你可以像这样使用。 在(strings.xml)中编写你的字符串,并在其中声明一个字符串变量(%1$s)。对于十进制数,我们使用(%2$d)。
<string name="my_string">My string name is %1$s</string>

在 Android 代码中(yourFile.java),在需要使用它的地方使用此字符串。
String.format(getResources().getString(R.string.my_string), stringName);

这不是一个很好的答案,但它可能会帮助您得到一些开始的想法。
谢谢。

3

在XML中无法直接格式化字符串。在您的代码中,可以使用String.formatcontext.getString()来获取和格式化您的字符串。

如果您想仅在XML中显示某些内容,并且不希望在最终构建中包含它(仅在编译时包含),您还可以使用tools:名称空间,如下所示:

<TextView 
...

    tools:text="Hello, this is a test"

/>

这将只出现在布局编辑器中,对于APK没有任何影响。它也可以用于其他字段,比如tools:visiblity


1

在布局表达式中,至少有两种方法可以进行字符串格式化:

android:text="@{String.format(@string/str_1, viewModel.username)}"

或者

android:text="@{@string/str_1(viewModel.username)}"

1
作为支持信息,在gradle中需要启用数据绑定,并在view.xml中使用layout标签作为根标签。 - Sagar Patel
1
作为支持信息,需要在Gradle中启用数据绑定,并在view.xml中将布局标签作为根标签。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接