我在库中制作了自定义View
。我希望我的视图背景是主题属性的引用。例如:
<style name="MyView">
<item name="android:background">?attr/my_view_background</item>
</style>
Android模式在多个地方使用此模式,例如列表分隔符。
但是在图书馆里,我不想制作一个自定义主题,因为这会强迫某人使用lib来扩展这个自定义主题,这个主题很难找到。
我希望用户能够设置属性,无论他使用什么主题,但这意味着某处必须定义默认值。
所以问题是如何在不制作自定义主题的情况下定义默认值?
答案 0 :(得分:0)
以下是如何制作它:在Context.obtainStyledAttributes(int, int[], int, int)
构造函数中使用MyView
的第三个参数:
public MyView(AttributeSet attrs, int defStyle) {
TypedArray backgroundArray = getContext().obtainStyledAttributes(
attrs, // The attrs passed to the view
new int[] { android.R.attr.background }, // I'm only interrested in getting the background
R.attr.myViewBackground, // The user can pass a custom background using this theme attribute
theme R.style.MyView // And that's the default style
);
setBackgroundDrawable(backgroundArray.getDrawable(0)); // At 0, there's the background attribute
backgroundArray.recycle();
}