Tengo un TextView que tiene una cadena codificada y tengo una variable dinámica que quiero poner al final de esta cadena. Este es mi codigo:
<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>
Tengo un problema con android:text="@string/Generic_Text"+"@{ Profile.name }"
. Los Generic_Text
estados "Mi nombre es" entonces Profile.name
es dinámico y obviamente cambia de un perfil a otro. Lo quiero para que toda la salida de TextView sea Mi nombre es {Profile.name} . Cualquier ayuda sería genial.
android
android-databinding
Ignacio Perez
fuente
fuente
Respuestas:
Puedes hacerlo:
si usa formato de cadena para su
Generic_Text
cadena. ex.%s
al finalfuente
Puede hacer esto aún más simple:
tu cadena debería ser así:
Editar:
Por supuesto, puede utilizar tantas variables como necesite:
Funciona solo porque está diseñado en enlace de datos. Más en documentos: https://developer.android.com/topic/libraries/data-binding/expressions#resources
fuente
My Name is null
si los datos aún no están listos (por ejemplo, no se cargaron desde la red)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Muchas formas de concatizar cadenas
1. Uso de recurso de cadena ( recomendado debido a la localización )
android:text= "@{@string/generic_name(user.name)}"
Simplemente haga un recurso de cadena como este.
2. Concat codificado de forma rígida
Esto es útil cuando necesita un anexo codificado como + para el número de teléfono.
3. Usando
String
el método concat de 'Aquí
space
hay una entidad html que se coloca dentrostrings.xml
. PorqueXML
no acepta entidades Html ni caracteres especiales directamente. (Vincular entidades HTML)4. Usando
String.format()
tienes que importar la clase String en el diseño en este tipo.
5. Concat dos cadenas por recurso de cadena.
En este caso, ponga un recurso de cadena en
strings.xml
Puede haber muchas otras formas, elija la que necesite.
fuente
Utilice un adaptador de encuadernación .
Esta muestra está escrita en Kotlin y tiene en cuenta que la variable vinculada puede ser nula:
luego use el adaptador de enlace en su XML en lugar de la
android:text
propiedadfuente
String
clase dexml
, esta solución solo es buena para ser utilizada para manipulaciones avanzadas de cadenas según sus requisitos. Sin embargo, no es incorrecto.Actualización de 2019, Android Studio a 3.4, Android Gradle Plugin a 3.4
No es necesario importar más
para operaciones con cadenas. Por favor marque esta respuesta .
fuente
En caso de que no pueda cambiar la cadena de recursos para que contenga
%s
al final (por ejemplo, porque se usa en otro lugar sin el sufijo):Si
Profile.name
no puede ser nulo, es suficiente. Sin embargo, sinull
ocurre, se bloqueará. Tienes que agregar otra capa:(que requiere
<import type="java.util.Objects"/>
trabajar).Nuevamente: todo este trabajo adicional vale la pena solo si tiene la cadena de recursos utilizada en otro lugar. La segunda razón es cuando desea manejar
null
como "cadena vacía" en lugar de un literal "nulo".fuente
En caso de que desee escribir texto en XML, puede utilizar `` comillas.
en otro lugar necesita Concat con la Cadena o variable , puede usar
si desea Concat el recurso de cadena en lugar de la variable que puede hacer,
fuente
Solo usar el
+
operador funciona para mí:String.xml será:
fuente