我将东西存储在 sqlite 数据库中。它的一个属性是颜色。当我显示这个时,我想做
objLinearLayout.setBackgroundColor(some_int)
通常我会使用 R.color.red 代替 some_int。但是,我坚持颜色,我认为每次运行应用程序时 R 文件都会为红色生成一个新的 id,这使得该方法不可行。我可以存储字符串表示形式,例如“red”,并在我的 java 代码中检查颜色字符串并应用正确的 R.color,但这看起来很难看。有办法解决吗?
我将东西存储在 sqlite 数据库中。它的一个属性是颜色。当我显示这个时,我想做
objLinearLayout.setBackgroundColor(some_int)
通常我会使用 R.color.red 代替 some_int。但是,我坚持颜色,我认为每次运行应用程序时 R 文件都会为红色生成一个新的 id,这使得该方法不可行。我可以存储字符串表示形式,例如“red”,并在我的 java 代码中检查颜色字符串并应用正确的 R.color,但这看起来很难看。有办法解决吗?
您不应该将 R(即R.color.red
)中的值存储在任何类型的永久存储中。该值会在每个应用程序构建时重新生成,因此如果发布更新,以前的状态会R.color.red
是现在R.color.purple
或更糟R.layout.activity_main
。
您可以做的是将解析的颜色存储在 SQLite 数据库 ( getResources().getColor(R.color.red)
) 中,因为它只是一个表示颜色的整数,而不是指向颜色的指针。这样,如果您最终R.color.red
从#F00 更改为#E00,则保存的值将是#F00。
您可以存储十六进制代码并在设置颜色时使用它。像ll.setBackgroundColor(Color.parseColor("#ffffff"));
这是对另一个问题的评论的一些很好的解释。
如果要在数据库中保存颜色的名称,可以使用 getIdentifier 方法。
例如:
Resources resources = getResources();
int colorId = resources.getIdentifier("your_color_name", "color", getPackageName());