Android 以编程方式(从模块)获取强调色
我制作了一个自定义工具栏,效果很好,但由于我在模块上移动了源代码,我面临一些问题: 首先:我无法检索重音颜色,因为它引发了此崩溃:Android 以编程方式(从模块)获取强调色,android,android-custom-view,android-theme,android-library,Android,Android Custom View,Android Theme,Android Library,我制作了一个自定义工具栏,效果很好,但由于我在模块上移动了源代码,我面临一些问题: 首先:我无法检索重音颜色,因为它引发了此崩溃: Caused by: java.lang.NoClassDefFoundError: com.kassisdion.lib.R$attr (这就是我尝试检索重音颜色的方式) 第二:我无法再访问android.support.v7.appcompat.R.attr.toolbarStyle值(在我静态访问它之前) 我认为这两个问题是有联系的,但我不知道出了什么问题
Caused by: java.lang.NoClassDefFoundError: com.kassisdion.lib.R$attr
(这就是我尝试检索重音颜色的方式)
第二:我无法再访问android.support.v7.appcompat.R.attr.toolbarStyle值(在我静态访问它之前)
我认为这两个问题是有联系的,但我不知道出了什么问题
更新:
我曾经覆盖过很多小部件,我使用这个构造函数:
public MyWidget(Context context, AttributeSet attrs) {
this(context, attrs, android.support.v7.appcompat.R.attr.myWidgetStyle);
}
通常人们用0
替换android.support.v7.appcompat.R.attr.myWidgetStyle
,但这可能会导致一些问题(如编辑文本变得不可编辑)
经过大量研究,我发现,android.support.v7.appcompat.R.styleable.
不能使用。(在上次更新中,他们将此字段设置为私有,可能与我的问题有关)
因此,我的解决方案是创建我自己的工具栏,而不是扩展android.support.v7.widget.Toolbar以从主题中获得颜色:
@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;
}
例如,要获取强调色(来自片段):
我认为这取决于您导入的R类,请在文件顶部检查您的导入。您的解决方案与GetThemeACentColor2()相同,您应该在发布解决方案之前阅读问题。。。
@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);