我在几个地方需要相同的常数:
Androidstrings.xml
XML资源文件中的- 在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