如何在XML资源文件和源代码中共享常量作为静态值



我在几个地方需要相同的常数:

Androidstrings.xmlXML资源文件中的
  • 在Kotlin源代码中作为静态字符串(不访问上下文(

我该怎么办?

我可以看到3种可能性,可能与否,但我不知道如何实现它们中的任何一种:

a(在strings.xml中将常量定义为资源,并将其导入源代码中

XML:OK

<string name="my_constant">My.value</string>

问题:我不能在代码中将它定义为静态/常量,因为我需要一个上下文来获取它的值,例如context.getString(R.string.my_constant)。除非有其他方法,但我还没有找到。

科特林:?

companion object {
const val MY_CONSTANT = ??.getString(R.string.my_constant)
}

b(在Kotlin源代码中定义consant,并在XML资源文件中导入其值

Kotlin:好的

companion object {
const val MY_CONSTANT = "My.value"
}

问题:我没有找到在strings.xml中导入值的方法。

XML:?

<string name="my_constant" value="???"/>

c(在build.gradle中定义常量,在XML和Kotlin源代码中导入值

问题:我只是不知道怎么做,我尝试过BuildConfig,但在源代码中无法获得值。

格拉德尔:?

buildTypes {
all {
// does not seem correct:
buildConfigField 'String', 'MY_CONSTANT', '"My.value"'
}
release {
// ... other settings
}
}

XML:?科特林:?

companion object {
const val MY_CONSTANT = BuildConfig.MY_CONSTANT // does not work
}

我通常定义我的API常量,如以下

在grade.properties 中定义常量

API_KEY=""

然后在你的构建中。gradle(模块(

defaultConfig {
buildConfigField("String", "API_KEY", API_KEY)
}

现在你应该可以从任何地方调用常数

BuildConfig.API_KEY

最新更新