Строки из строк. xml доступны в приложении, но не используются виджетами - PullRequest
0 голосов
/ 07 марта 2020

Я делаю приложение Android. Android Studio справедливо ругает меня, если я жестко закодировал строки в редакторе макетов, поэтому я поместил их в res/values/strings.xml. Для упрощенного примера:

<resources>
    <string name="thing">Do a thing</string>
</resources>

Затем я установил для свойства text кнопки значение @string/thing. Это правильно отображает «Делать что-то» в редакторе макета, как и ожидалось. Однако, когда я загружаю свое приложение на телефон с помощью стандартных команд «Выполнить» или «Отладка» в Android Studio, кнопка остается пустой. Это интересно, поскольку, когда я вручную вызываю resources.getString(R.string.thing), я получаю "Do a thing" назад.

Я могу вручную установить текстовые поля виджетов таким образом, выполняя такие акробатические операции, как:

findViewById<Button>(R.id.myButton).text = resources.getString(R.string.thing)

но это большая работа, которая, насколько я знаю, должна выполняться автоматически. Это случилось со мной и в приложении Java, поэтому проблема не в Kotlin -specifi c. Я использую Android Studio 3.6 на Linux, и устройство представляет собой Redmi Note 3 Pro с LineageOS 16 (P ie). Кнопка также пуста, когда приложение запускается в виртуальном AVD, поэтому, очевидно, я что-то делаю не так. Вот полный макет активности и строковые XML файлы.

1 Ответ

1 голос
/ 07 марта 2020

Каждый из ваших Button виджетов имеет tools:text вместо android:text:

<Button
    android:id="@+id/nextButton"
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    tools:text="@string/nav_next" />

android:text используется для отображения фиксированного текста во время выполнения и, по умолчанию, в разработке tools.

tools:text предназначен для отображения текста образца только в инструментах разработки. В основном это для случаев, когда текст, который вы действительно хотите использовать, неизвестен до времени выполнения (например, его необходимо загрузить из базы данных). Использование tools:text позволяет получить представление о том, как в действительности будет выглядеть макет в инструментах, без предварительного заполнения этого текста при запуске приложения.

Итак, переключитесь с tools:text на android:text и вы должны получить результаты, которые вы ищете.

...