声明一堆可绘制对象 (Kotlin) 的最佳方法是什么?
What is the best way to declare a bunch of drawables (Kotlin)?
我有很多矢量图标作为 XML 可绘制资源(准确地说是 96 个)。我将它们分为 8 个类别。目前我声明它们如下:
private val categoryA = arrayListOf(R.drawable.a1, ... R.drawable.an)
private val categoryB = arrayListOf(R.drawable.b1, ... R.drawable.bn)
***
private val categoryH = arrayListOf(R.drawable.h1, ... R.drawable.hn)
一切都运行良好且快速,但我不确定这是否是真正应用程序的好方法。我还在应用程序中将 Room DB 用于其他目的,所以我应该添加新的 table 并在首次启动时预填充数据库吗?
这也很容易,至少现在,稍后 add/remove 图标......但另一方面,代码看起来不太好(对我来说)有这么多 R.drawable.id
行。
编写一个可以通过反射获取可绘制 Int 的函数:
fun getDrawableIdByName(name: String) = try {
R.drawable::class.java.getField(name).getInt(null)
} catch (e: NoSuchFieldException) {
error("No drawable with name $name")
}
然后你可以用它构建你的列表:
val categoryLists = ('a'..'h')
.map { category ->
List(12) { index ->
getDrawableIdByName("$category${index + 1}")
}
}
我想你可以在第一次启动后将它写入你的数据库,但我认为这对于只有 96 个项目来说有点过分了。
我有很多矢量图标作为 XML 可绘制资源(准确地说是 96 个)。我将它们分为 8 个类别。目前我声明它们如下:
private val categoryA = arrayListOf(R.drawable.a1, ... R.drawable.an)
private val categoryB = arrayListOf(R.drawable.b1, ... R.drawable.bn)
***
private val categoryH = arrayListOf(R.drawable.h1, ... R.drawable.hn)
一切都运行良好且快速,但我不确定这是否是真正应用程序的好方法。我还在应用程序中将 Room DB 用于其他目的,所以我应该添加新的 table 并在首次启动时预填充数据库吗?
这也很容易,至少现在,稍后 add/remove 图标......但另一方面,代码看起来不太好(对我来说)有这么多 R.drawable.id
行。
编写一个可以通过反射获取可绘制 Int 的函数:
fun getDrawableIdByName(name: String) = try {
R.drawable::class.java.getField(name).getInt(null)
} catch (e: NoSuchFieldException) {
error("No drawable with name $name")
}
然后你可以用它构建你的列表:
val categoryLists = ('a'..'h')
.map { category ->
List(12) { index ->
getDrawableIdByName("$category${index + 1}")
}
}
我想你可以在第一次启动后将它写入你的数据库,但我认为这对于只有 96 个项目来说有点过分了。