我想更改标题背景颜色,并且正在使用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 ”
答案 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));