android - 来自 strings.xml 的字符串在应用程序中可用但不被小部件使用
问题描述
我一直在制作一个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 特有的。我在 Linux 上使用 Android Studio 3.6,设备是带有 LineageOS 16 (Pie) 的 Redmi Note 3 Pro。当应用程序在虚拟 AVD 中启动时,该按钮也是空白的,所以很明显我一定做错了什么。 这是完整的活动布局和字符串 XML 文件。
解决方案
您的每个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:text
仅用于在开发工具中显示示例文本。大多数情况下,您真正想要使用的文本直到运行时才知道(例如,需要从数据库加载)。使用tools:text
可以让您了解布局在工具中的真实外观,而不是在您的应用程序运行时预先填充该文本。
因此,从 to 切换tools:text
到android:text
,您应该会得到您想要的结果。
推荐阅读
- javascript - 带有正则表达式的电话号码(加号和空格)
- css - SCSS 未定义变量:"$general-grey" 但该变量实际已定义且不同
- java - 将 java 与 Oracle 18c 连接时出现 JDBC 错误
- python - 如何使用 Python 将半结构化文本文件加载到结构化格式的数据框中?
- angular - Angular 8 中 Observable 中的类型转换问题
- c# - C# PowerShell - AddScript 作为多个语句
- python - H5py,将匹配的行从巨大的 hdf5 文件合并到较小的数据集
- javascript - 如何使用 Context API 在 React 中组合多个 reducer
- node.js - 无法在节点应用程序中使用 process.env 访问 mailgun 凭据
- python-3.x - 在 python Draft7 的 jsonschema 中从 $ref 创建 Ref-resolver