Ign*_*rez 102 android android-databinding
我有一个TextView,它有一个硬编码的字符串,我有一个动态变量,我想放在这个字符串的末尾.这是我的代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp">
<TextView
android:id="@+id/PeopleName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/Generic_Text"+"@{ Profile.name }" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我遇到了问题 android:text="@string/Generic_Text"+"@{ Profile.name }".该Generic_Text州"我的名字是",则Profile.name是动态的,并从轮廓明显的变化来分析.我想要它,以便整个TextView输出是我的名字是{Profile.name}.任何帮助都会很棒.
Rom*_*n_D 285
你甚至可以更简单地做到这一点:
android:text= "@{@string/generic_text(profile.name)}"
Run Code Online (Sandbox Code Playgroud)
你的字符串应该是这样的:
<string name="generic_text">My Name is %s</string>
Run Code Online (Sandbox Code Playgroud)
编辑:
当然,您可以根据需要使用尽可能多的变量:
android:text= "@{@string/generic_text(profile.firstName, profile.secondName)}"
<string name="generic_text">My Name is %1$s %2$s</string>
Run Code Online (Sandbox Code Playgroud)它的工作原理只是因为它是在数据绑定中设计的.更多文档:https://developer.android.com/topic/libraries/data-binding/expressions#resources
C0D*_*OU5 113
你可以这样做:
android:text= "@{String.format(@string/Generic_Text, Profile.name)}"
Run Code Online (Sandbox Code Playgroud)
如果您为Generic_Text字符串使用字符串格式.恩.%s在末尾
Khe*_*raj 43
android:text= "@{@string/generic_name(user.name)}"
只需像这样制作字符串资源.
<string name="generic_name">Hello %s</string>
Run Code Online (Sandbox Code Playgroud)
android:text="@{`Hello ` + user.name}"/>
Run Code Online (Sandbox Code Playgroud)
当您需要像电话号码这样的硬编码追加时,这非常有用.
Stringconcat方法android:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Run Code Online (Sandbox Code Playgroud)
这space是一个放在里面的html实体strings.xml.因为XML不直接接受Html实体或特殊字符.(链接Html实体)
<string name="space">\u0020</string>
Run Code Online (Sandbox Code Playgroud)
String.format()android:text= "@{String.format(@string/Hello, user.name)}"
Run Code Online (Sandbox Code Playgroud)
您必须在此类型的布局中导入String类.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="String" />
</data>
<TextView
android:text= "@{String.format(@string/Hello, user.name)}"
... >
</TextView>
</layout>
Run Code Online (Sandbox Code Playgroud)
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,放入一个字符串资源 strings.xml
<string name="generic_name">%1$s, %2$s</string>
Run Code Online (Sandbox Code Playgroud)
可以有许多其他方式,选择你需要的方式.
小智 12
字符串.xml:<string name="my_string">Hello %s</string>
视图.xml:android:text="@{@string/my_string(name)}"
2019 更新,Android studio 到 3.4,Android Gradle 插件到 3.4
不再需要导入
<import type="java.lang.String" />"
Run Code Online (Sandbox Code Playgroud)
用于字符串操作。请检查这个答案。
小智 7
如果您想在 XML 中输入文本,可以使用``引号。
android:text="@{`Device Name`}"
Run Code Online (Sandbox Code Playgroud)
在其他地方你需要与字符串或变量连接,你可以使用
android:text="@{`Device Name`.concat(android.os.Build.MANUFACTURER)}"
Run Code Online (Sandbox Code Playgroud)
如果你想连接字符串资源而不是变量,你可以这样做,
android:text="@{@string/app_name.concat(`Device Name`)}"
Run Code Online (Sandbox Code Playgroud)
使用绑定适配器。
此示例是用 Kotlin 编写的,并考虑到绑定变量可以为 null:
@BindingAdapter("my_name")
fun TextView.setMyName(name: String?) {
this.text =
if (name.isNullOrEmpty()) "" else "${this.context.getString(R.string.Generic_Text)} $name"
}
Run Code Online (Sandbox Code Playgroud)
然后在您的 XML 中使用绑定适配器而不是android:text属性
app:my_name="@{Profile.name}"
Run Code Online (Sandbox Code Playgroud)
您还可以使用格式化程序将字符串资源设置为其他字符串资源的参数,如下所示:
<string name="first_param_text">Hello</string>
<string name="second_param_text">World</string>
<string name="formatted_text">%s lovely %s</string>
Run Code Online (Sandbox Code Playgroud)
和
android:text="@{String.format(@string/formatted_text, @string/first_param_text, @string/second_param_text)}"
Run Code Online (Sandbox Code Playgroud)
“你好可爱的世界”将出现在视图中。
| 归档时间: |
|
| 查看次数: |
41732 次 |
| 最近记录: |