Eu tenho um TextView que possui uma string codificada e uma variável dinâmica que eu quero colocar no final dessa string. Este é o meu código:
<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>
Estou tendo um problema com android:text="@string/Generic_Text"+"@{ Profile.name }"
. Os Generic_Text
estados "Meu nome é" então Profile.name
é dinâmico e obviamente muda de perfil para perfil. Quero que toda a saída do TextView seja My Name seja {Profile.name} . Qualquer ajuda seria ótimo.
android
android-databinding
Ignacio Perez
fonte
fonte
Respostas:
Você consegue fazer isso:
se você usar a formatação de sequência para sua
Generic_Text
sequência. ex.%s
no fimfonte
Você pode fazer isso ainda mais simples:
sua string deve ser assim:
Editar:
Obviamente, você pode usar quantas variáveis precisar:
Funciona apenas porque foi projetado na ligação de dados. Mais em documentos: https://developer.android.com/topic/libraries/data-binding/expressions#resources
fonte
My Name is null
se os dados ainda não estão prontos (por exemplo, não foram carregados da rede)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Muitas maneiras de concatenar strings
1. Usando o recurso de string ( recomendado porque localização )
android:text= "@{@string/generic_name(user.name)}"
Basta criar recursos de string como este.
2. Concat codificado
Isso é útil quando você precisa acrescentar código codificado como + para o número de telefone.
3. Usando
String
o método concatAqui
space
está uma entidade html que é colocada dentrostrings.xml
. PorqueXML
não aceita entidades Html ou caracteres especiais diretamente. (Vincular entidades HTML)4. Usando
String.format()
você precisa importar a classe String no layout desse tipo.
5. concatize duas strings por recurso de string.
Nesse caso, coloque um recurso de string em
strings.xml
Pode haver muitas outras maneiras, escolha uma que você precisa.
fonte
Use um adaptador de ligação .
Este exemplo é escrito em Kotlin e leva em consideração que a variável vinculada pode ser nula:
em seguida, use o adaptador de ligação em seu XML em vez da
android:text
propriedadefonte
String
classe fromxml
, essa solução só é boa para ser usada em manipulações avançadas de String com base em seus requisitos. No entanto, não está incorreto.Atualização de 2019, Android studio para 3.4, Android Gradle Plugin para 3.4
Não é mais necessário importar
para operações de string. Por favor, verifique esta resposta .
fonte
Caso você não possa alterar a cadeia de recursos a conter
%s
no final (por exemplo, porque é usada em outro lugar sem o sufixo):Se
Profile.name
não puder ser nulo, basta. No entanto, senull
acontecer, ele travará. Você precisa adicionar outra camada:(o que requer
<import type="java.util.Objects"/>
trabalho.)Novamente: todo esse trabalho extra vale a pena apenas se você tiver a cadeia de recursos usada em outro lugar. O segundo motivo é quando você deseja manipular
null
como "cadeia vazia" em vez de um literal "nulo".fonte
Caso deseje digitar texto em XML, use `` quote.
em qualquer outro lugar em que você precise Concat com a String ou a variável , você pode usar
se você quiser Concat o recurso de string em vez da variável que você pode fazer,
fonte
Apenas usar o
+
operador funciona para mim:String.xml será:
fonte