Saya menggunakan DataBinding
Api untuk menyetel tampilan di tata letak android. Ini tata letak saya.
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>
Saya ingin TextView menampilkan Hello UserName . Cara mencapai ini menggunakan api data binding.
android
android-layout
data-binding
android-databinding
Sasank Sunkavalli
sumber
sumber
@{
Halo `+ user.firstName}`Ini sudah dijawab oleh @GeorgeMount dalam komentar salah satu solusinya. Yang bagi saya terlihat seperti solusi terbaik sejauh ini.
android:text="@{@string/location(user.city,user.state)}"
di strings.xml Anda
<string name="location">%1$s, %2$s</string>
sumber
Banyak cara untuk menggabungkan string
1. Menggunakan sumber daya string ( Paling disukai karena pelokalan )
android:text= "@{@string/generic_name(user.name)}"
Buat saja sumber daya string seperti ini.
<string name="generic_name">Hello %s</string>
2. Concat kode keras
android:text="@{`Hello ` + user.name}"/>
3. Menggunakan
String
metode concatandroid:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Berikut
space
adalah entitas html yang ditempatkan di dalamnyastrings.xml
. KarenaXML
tidak menerima entitas Html atau karakter khusus secara langsung. (Tautkan Entitas Html)<string name="space">\u0020</string>
4. Menggunakan
String.format()
android:text= "@{String.format(@string/Hello, user.name)}"
Anda harus mengimpor kelas String dalam tata letak dalam tipe ini.
<?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>
5. Metode lain
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Dalam hal ini, masukkan sumber daya string
strings.xml
<string name="generic_name">%1$s, %2$s</string>
Ada banyak cara lain, pilih salah satu yang Anda butuhkan.
sumber
Karena xml mendukung tanda kutip tunggal untuk nilai atribut, Anda juga dapat melakukan ini:
android:text='@{"Hello "+user.firstName}'
sumber
Ada dua cara.
Solusi Pertama
concat dengan aksen kuburan (`)
android:text="@{`Hello ` + user.firstName}"/>
Solusi Kedua
Deklarasikan string Anda dalam
strings.xml
suka
"Hello %1$s , (whatever you want to add then add here)"
.amd gunakan
String.format(stringResource, upsatename);
sumber
android:text="@{@string/hello(user.firstName)}"
Dalam kasus string statis dan dinamika lainnya, Anda dapat menggunakan ini
android:text="@{`Hello ` + user.firstName}"/>
Dalam kasus data dinamis, Anda dapat menggunakan ini.
android:text='@{user.firstName+" "+user.lastName}'
sumber
Untuk melakukan concat dalam layout 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)}"
Di strings.xml saya telah menambahkan kode untuk ruang kosong:
<string name="space">\u0020</string>
sumber
jika Anda ingin menggabungkan
String
resource dengan data dari model Anda, Anda dapat melakukannya dengan cara seperti ini:android:text='@{@string/release_date+model.release_date}'
sumber
Cara paling sederhana yang saya temukan adalah mengganti '' (tunggal) di tempat "" (ganda), Untuk Misalnya. Anda memiliki dua variabel,
<variable name="a" type="String" /> <variable name="b" type="String" />
Sekarang untuk menggabungkan,
android:text='a + " " + b}'
sumber