我已经制作了一个自定义工具栏,但是由于我在模块上移动了源代码,因此我遇到了一些问题:
首先:我无法检索强调色因为它引发了这次崩溃:
Caused by: java.lang.NoClassDefFoundError: com.kassisdion.lib.R$attr
(这是我尝试检索重音色的方式)
private static int getThemeAccentColor1(final Context context) {
TypedValue typedValue = new TypedValue();
TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{R.attr.colorAccent});
int color = a.getColor(0, 0);
a.recycle();
return color;
}
public static int getThemeAccentColor2(final Context context) {
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(R.attr.colorAccent, value, true);
return value.data;
}
其次:我无法再访问 android.support.v7.appcompat.R.attr.toolbarStyle 值(在我用它静态访问之前)。
我认为这两个问题有关,但我不知道出了什么问题。
更新:
我曾经覆盖了很多Widget而且我使用了这个构造函数:
public MyWidget(Context context, AttributeSet attrs) {
this(context, attrs, android.support.v7.appcompat.R.attr.myWidgetStyle);
}
通常人们会将android.support.v7.appcompat.R.attr.myWidgetStyle
替换为0
,但这可能会导致一些问题(例如EditText变得不可编辑)。
经过大量研究后,我发现android.support.v7.appcompat.R.styleable.*
无法使用。 (在最后一次更新时,他们将这个字段设为私有,也许它与我的问题有关。)
所以我的解决方案是创建自己的工具栏,而不是扩展android.support.v7.widget.Toolbar
答案 0 :(得分:2)
从主题中获取颜色:
@ColorInt
public static int getThemeColor
(
@NonNull final Context context,
@AttrRes final int attributeColor
)
{
final TypedValue value = new TypedValue();
context.getTheme ().resolveAttribute (attributeColor, value, true);
return value.data;
}
例如,要获得强调色(来自片段):
final int color = UtilsColor.getThemeColor(getActivity(), R.attr.colorAccent);