我想创建自定义控件,并根据当前主题对它们进行样式化。如何访问标准系统主题中的颜色和绘图?
如果你指的是从主题中动态检索colorPrimary或colorPrimaryDark等颜色,那么假设你的主题看起来像
<style name="AppTheme.OrangeTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/orange</item>
<item name="colorPrimaryDark">@color/orangeDark</item>
<item name="colorAccent">@color/orangeAccent</item>
</style>
您可以使用此方法从styledAttributes访问primaryColor
public static int getPrimaryColorFromSelectedTheme(Context context) {
int[] attrs = {R.attr.colorPrimary, R.attr.colorPrimaryDark};
TypedArray ta = context.getTheme().obtainStyledAttributes(attrs);
int primaryColor = ta.getColor(0, Color.BLACK); //1 index for primaryColorDark
//default value for primaryColor is set to black if primaryColor not found
ta.recycle();
return primaryColor;
}
同样,您也可以通过将colorAccent添加到属性中来访问它。
关于drawables,我不太明白你所说的访问标准系统主题中的drawable是什么意思。但你可以使用访问Android绘图设备
ContextCompat.getDrawable(context, android.R.drawable.[Drawable Name]);