Ответ 1
дополнить его серьезным акцентом (')
android:text="@{'Hello ' + user.firstName}"/>
Вы можете объединить его несколькими способами, проверьте здесь concat-two-strings-in-textview-using-databinding
Im использует DataBinding
Api для установки представлений в макетах android. Вот мой макет.
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>
Я хочу, чтобы TextView отображал Hello UserName. Как достичь этого, используя привязку данных api.
дополнить его серьезным акцентом (')
android:text="@{'Hello ' + user.firstName}"/>
Вы можете объединить его несколькими способами, проверьте здесь concat-two-strings-in-textview-using-databinding
На это уже ответил @GeorgeMount в комментариях к одному из решений. Что для меня выглядит лучшим решением на данный момент здесь. Пожалуйста, дайте ему +1
android:text="@{@string/location(user.city,user.state)}"
в вашем strings.xml
<string name="location">%1$s, %2$s</string>
android:text= "@{@string/generic_name(user.name)}"
Просто сделайте строковый ресурс вот так.
<string name="generic_name">Hello %s</string>
android:text="@{'Hello ' + user.name}"/>
String
concatandroid:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Здесь space
- это HTML-сущность, которая находится внутри strings.xml
. Потому что XML
не принимает Html-объекты или специальные символы напрямую. (Ссылка HTML-сущности)
<string name="space">\u0020</string>
String.format()
android:text= "@{String.format(@string/Hello, user.name)}"
Вы должны импортировать класс 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>
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
В этом случае поместите строковый ресурс в strings.xml
<string name="generic_name">%1$s, %2$s</string>
Там может быть много других способов, выберите тот, который вам нужен.
Так как xml поддерживает одинарные кавычки для значений атрибута, вы также можете сделать это:
android:text='@{"Hello "+user.firstName}'
Есть два способа.
Первое решение
Конкат с серьезным акцентом (')
android:text="@{'Hello ' + user.firstName}"/>
Второе решение
Объявите вашу строку в strings.xml
как "Hello %1$s, (whatever you want to add then add here)"
.
использовать String.format(stringResource, upsatename);
Сделать concat в макете xml:
<data>
/*This is used for android view*/
<import type="android.view.View" />
/*This is used for android resources*/
<import type="com.myapp.R" />
/*This is app context*/
<variable
name="context"
type="android.content.Context" />
/*This is used for model data*/
<variable
name="item"
type="com.myapp.models.Chapter" />
</data>
android:text="@{item.serialNo.concat(@string/space).concat(item.title)}"
В файле strings.xml я добавил код для пробела:
<string name="space">\u0020</string>
если вы хотите объединить ресурс String
с данными из вашей модели, вы можете сделать это следующим образом:
android:text='@{@string/release_date+model.release_date}'
Самый простой способ, который я нашел, это заменить '' (одинарный) вместо "" (двойной), Например, У вас есть две переменные,
<variable name="a" type="String" />
<variable name="b" type="String" />
Теперь объединить,
android:text='@{a + " " + b}