У меня есть TextView с жестко запрограммированной строкой, и у меня есть динамическая переменная, которую я хочу поместить в конец этой строки. Это мой код:
<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>
У меня проблема с android:text="@string/Generic_Text"+"@{ Profile.name }"
. В Generic_Text
государстве «Мое имя» , то Profile.name
динамична и , очевидно , меняется от профиля к профилю. Я хочу, чтобы весь вывод TextView был моим именем {Profile.name} . Любая помощь была бы замечательной.
android
android-databinding
Игнасио Перес
источник
источник
Ответы:
Ты можешь сделать это:
если вы используете строковое форматирование для своей
Generic_Text
строки. ех.%s
в концеисточник
Вы можете сделать это еще проще:
ваша строка должна быть такой:
Редактировать:
Конечно, вы можете использовать столько переменных, сколько вам нужно:
Он работает просто потому, что разработан в привязке данных. Подробнее в документации: https://developer.android.com/topic/libraries/data-binding/expressions#resources
источник
My Name is null
если данные еще не готовы (например, не были загружены из сети)android:text= "@{profile == null ? @string/loading : @string/generic_text(profile.firstName, profile.secondName)}"
Множество способов объединения строк
1. Использование строкового ресурса ( рекомендуется из-за локализации )
android:text= "@{@string/generic_name(user.name)}"
Просто сделайте такой строковый ресурс.
2. Жестко запрограммированный concat
Это полезно, когда вам нужно жестко запрограммировать добавление типа + для номера телефона.
3. Использование
String
метода concatВот
space
html-объект, который находится внутриstrings.xml
. ПотомуXML
что не принимает объекты HTML или специальные символы напрямую. (Ссылка на HTML-объекты)4. Использование
String.format()
вам необходимо импортировать класс String в макет этого типа.
5. Объедините две строки по строковому ресурсу.
В этом случае поместите строковый ресурс в
strings.xml
Может быть много других способов, выберите тот, который вам нужен.
источник
Используйте адаптер для привязки .
Этот пример написан на Kotlin и учитывает, что связанная переменная может иметь значение null:
затем используйте адаптер привязки в своем XML вместо
android:text
свойстваисточник
String
классом fromxml
, это решение можно использовать только для расширенных манипуляций со строками в соответствии с вашими требованиями. Однако это не так.Обновление 2019, Android Studio до 3.4, Android Gradle Plugin до 3.4
Больше не требуется импорт
для строковых операций. Пожалуйста, проверьте этот ответ .
источник
В случае, если вы не можете изменить строку ресурса, чтобы она содержалась
%s
в конце (например, потому что она используется в другом месте без суффикса):Если
Profile.name
не может быть null, этого достаточно. Однако, если этоnull
произойдет, произойдет сбой. Вам нужно добавить еще один слой:(что требует
<import type="java.util.Objects"/>
работы.)Опять же: вся эта дополнительная работа стоит того, только если у вас есть строка ресурса, используемая в другом месте. Вторая причина - когда вы хотите обрабатывать
null
как «пустую строку», а не как «нулевой» литерал.источник
В случае, если вы хотите ввести текст в XML, вы можете использовать `` цитата.
в другом месте вам нужно Concat со строкой или переменной , вы можете использовать
если вы хотите использовать строковый ресурс Concat вместо переменной, которую вы можете сделать,
источник
У
+
меня работает просто оператор:String.xml будет:
источник