2

我将东西存储在 sqlite 数据库中。它的一个属性是颜色。当我显示这个时,我想做

objLinearLayout.setBackgroundColor(some_int)

通常我会使用 R.color.red 代替 some_int。但是,我坚持颜色,我认为每次运行应用程序时 R 文件都会为红色生成一个新的 id,这使得该方法不可行。我可以存储字符串表示形式,例如“red”,并在我的 java 代码中检查颜色字符串并应用正确的 R.color,但这看起来很难看。有办法解决吗?

4

3 回答 3

5

您不应该将 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。

于 2014-10-30T00:36:17.710 回答
4

您可以存储十六进制代码并在设置颜色时使用它。像ll.setBackgroundColor(Color.parseColor("#ffffff"));

这是对另一个问题的评论的一些很好的解释。

在 Java (Android) 中使用 LinearLayout 和 TextView 更改颜色

于 2014-10-30T00:24:31.960 回答
0

如果要在数据库中保存颜色的名称,可以使用 getIdentifier 方法。

例如:

Resources resources = getResources();
int colorId = resources.getIdentifier("your_color_name", "color", getPackageName()); 
于 2014-10-30T00:29:18.800 回答