如何将字符串颜色更改为颜色资源?

时间:2018-10-30 11:54:22

标签: android material-design

我想更改标题背景颜色,并且正在使用MaterialDrawer库:

   AccountHeader headerResult = new AccountHeaderBuilder()
            .withActivity(this)                   
  .withHeaderBackground(Color.parseColor(mPrefs.getString("theme_color",getResources().getString(R.string.default_color)))
  .withSelectionListEnabledForSingleProfile(false)
            ... and so on 

但是在标题背景下,我收到错误消息“ 期望颜色资源ID(R.color。),但收到RGB整数”,并且无法设置从首选项读取的背景颜色。它会在日志上显示错误:“ android.content.res.Resources $ NotFoundException:资源ID#0x2e60e8

6 个答案:

答案 0 :(得分:1)

从字符串中创建ColorDrawable,然后将其设置为标题

int col = Color.parseColor(mPrefs.getString("theme_color",getResources().getString(R.string.default_color)));
ColorDrawable cd = new ColorDrawable();
cd.setColor(col);

headerResult = new AccountHeaderBuilder()
            .withActivity(this)
            .withCompactStyle(false)
            .withHeaderBackground(cd)
            .withSavedInstance(savedInstanceState)
            .build();

答案 1 :(得分:0)

将color HEX代码保存在colors.xml中,如下所示:        #AABBEE(在此处使用颜色的十六进制代码) 然后,设置背景:

  .withHeaderBackground(R.color.myColor)
  .withSelectionListEnabledForSingleProfile(false)
  ....

答案 2 :(得分:0)

首先,您应该在问题中提到您正在使用MaterialDrawer库,因为AccountHeader不是标准Android SDK的一部分。

也就是说,检查回购中AccountHeaderBuilder的来源表明,withHeaderBackground方法有3种变体,分别是Drawable@DrawableRes int和a分别ImageHolder

如果您坚持要从strings.xml加载颜色,那么我认为可以使用以下方法:

使用您的字符串创建一个ColorDrawable,其格式应为0xAARRGGBB

由于ColorDrawable类扩展了Drawable,因此它应该是withHeaderBackground方法的有效参数。您的代码如下所示:

ColorDrawable cd = new ColorDrawable(getResources().getString(R.string.default_color));

AccountHeader headerResult = new AccountHeaderBuilder()
            .withActivity(this)                   
  .withHeaderBackground(cd)
  .withSelectionListEnabledForSingleProfile(false)
            ... and so on 

一种更简单的方法是仅拥有一个drawable资源,并将其用作R.drawable.default_drawable

答案 3 :(得分:0)

Color.parseColor()解析颜色字符串,并返回相应的 color-int ,此int值与资源ID 不同,即使两个值也是{ {1}}类型。

您可以这样:

int

无需使用int colorID = getResourceID("your_color_name", "color", getApplicationContext()); 方法。

答案 4 :(得分:0)

您使用的withHeaderBackground()的签名是这样的:

public AccountHeaderBuilder withHeaderBackground(@DrawableRes int headerBackgroundRes)

但是您传递的是某个颜色的int值。
您需要一个颜色或可绘制的资源ID。

答案 5 :(得分:0)

您可以分两步进行

假设您的颜色是#8080000

1。首先将您的Hex转换为int

int yourColor = Color.parseColor("#808000");

2。设置背景

.setBackgroundColor(context.getColor(yourColor));