Android Strings.xml中的字符串在应用程序中可用,但小部件不使用

Android Strings.xml中的字符串在应用程序中可用,但小部件不使用,android,string,text,android-resources,Android,String,Text,Android Resources,我一直在做一个Android应用程序。如果我在布局编辑器中硬编码字符串,Android Studio会责骂我,所以我把它们放在res/values/strings.xml中。举一个简单的例子: 做一件事 然后我将一个按钮的text属性设置为@string/thing。如预期的那样,这将在布局编辑器中正确显示“做一件事”。然而,当我在Android Studio中使用默认的运行或调试命令在手机上加载我的应用程序时,按钮是空白的。这很有趣,因为当我手动调用resources.getString(

我一直在做一个Android应用程序。如果我在布局编辑器中硬编码字符串,Android Studio会责骂我,所以我把它们放在
res/values/strings.xml
中。举一个简单的例子:


做一件事
然后我将一个按钮的
text
属性设置为
@string/thing
。如预期的那样,这将在布局编辑器中正确显示“做一件事”。然而,当我在Android Studio中使用默认的运行或调试命令在手机上加载我的应用程序时,按钮是空白的。这很有趣,因为当我手动调用
resources.getString(R.string.thing)
时,我确实得到了
“做一件事”

我可以通过以下技巧手动设置小部件的文本字段:

findViewById<Button>(R.id.myButton).text = resources.getString(R.string.thing)
findviewbyd(R.id.myButton).text=resources.getString(R.string.thing)
但就我所知,这是一个需要自动完成的工作。这在Java应用程序中也发生过,所以问题不是Kotlin特有的。我在Linux上使用的是Android Studio 3.6,该设备是一款带有天堂OS 16(Pie)的Redmi Note 3 Pro。 当应用程序在虚拟AVD中启动时,按钮也是空白的,所以很明显我一定是做错了什么。

您的每个
按钮
小部件都有
工具:文本
,而不是
安卓:文本

<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
可以让您了解工具中的布局,而不是在应用程序运行时预先填充文本


所以,从
tools:text
切换到
android:text
,你应该会得到你想要的结果。

你能编辑你的问题并在你所指的
@string/thing
的地方发布完整的布局吗?@commonware当然,我已经链接到它了。谢谢,它修复了它!我感到困惑的原因是Android Studio中的“工具”文本字段旁边有一个扳手图标,根据我在Visual Studio中的经验,扳手符号表示“属性”,我认为这意味着该值是动态的,而普通的未扭曲字段仅用于硬编码字符串。@oreganoli:在Studio中,扳手表示“在
工具
名称空间中的等效属性”。它还表示“这就是为什么有些人只使用XML而跳过属性窗格的原因”。:-)