Estoy usando DataBinding
Api para configurar las vistas en diseños de Android. Aquí está mi diseño.
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>
Quiero que TextView muestre Hello UserName . Cómo lograr esto usando la API de enlace de datos.
android
android-layout
data-binding
android-databinding
Sasank Sunkavalli
fuente
fuente
@{
Hola `+ user.firstName}`Esto ya lo responde @GeorgeMount en los comentarios de una de las soluciones. Lo que a mí me parece la mejor solución hasta ahora.
android:text="@{@string/location(user.city,user.state)}"
en tu strings.xml
<string name="location">%1$s, %2$s</string>
fuente
Muchas formas de concatizar cadenas
1. Uso de recursos de cadena ( más preferible debido a la localización )
android:text= "@{@string/generic_name(user.name)}"
Simplemente haga un recurso de cadena como este.
<string name="generic_name">Hello %s</string>
2. Concat codificado de forma rígida
android:text="@{`Hello ` + user.name}"/>
3. Usando
String
el método concat de 'android:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Aquí
space
hay una entidad html que se coloca dentrostrings.xml
. PorqueXML
no acepta entidades Html ni caracteres especiales directamente. (Vincular entidades HTML)<string name="space">\u0020</string>
4. Usando
String.format()
android:text= "@{String.format(@string/Hello, user.name)}"
tienes que importar la clase String en el diseño de este tipo.
<?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. Otro método
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
En este caso, ponga un recurso de cadena en
strings.xml
<string name="generic_name">%1$s, %2$s</string>
Puede haber muchas otras formas, elija la que necesite.
fuente
Dado que xml admite comillas simples para los valores de atributo, también puede hacer esto:
android:text='@{"Hello "+user.firstName}'
fuente
Hay dos maneras.
Primera solucion
concat con acento grave (`)
android:text="@{`Hello ` + user.firstName}"/>
Segunda solución
Declare su cadena en
strings.xml
como
"Hello %1$s , (whatever you want to add then add here)"
.uso amd
String.format(stringResource, upsatename);
fuente
android:text="@{@string/hello(user.firstName)}"
En caso de cadena estática y otra dinámica, puede usar esto
android:text="@{`Hello ` + user.firstName}"/>
En caso de datos dinámicos, puede usar esto.
android:text='@{user.firstName+" "+user.lastName}'
fuente
Para hacer un concat en diseño 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)}"
En strings.xml he agregado código para espacio en blanco:
<string name="space">\u0020</string>
fuente
si desea concatizar
String
recursos con datos de su modelo, puede hacerlo de la siguiente manera:android:text='@{@string/release_date+model.release_date}'
fuente
La forma más sencilla que encontré es reemplazar '' (sencillo) en lugar de "" (doble), por ejemplo. Tienes dos variables,
<variable name="a" type="String" /> <variable name="b" type="String" />
Ahora para concatenar,
android:text='a + " " + b}'
fuente