问题
My question is similar to "How to put a CardView attribute in a style", but I need to go deeper.
I'm using AppCompat theme, and my styles looks like
style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/toolbar_color</item>
<item name="android:listViewStyle">@style/CustomListView</item>
</style>
and I create separate style for CardView
<style name="CustomCardView" parent="CardView">
<item name="cardBackgroundColor">@color/card_background</item>
<item name="cardCornerRadius">@dimen/card_corner</item>
</style>
Can I attach it to main style?
回答1:
public View(Context context, AttributeSet attrs, int defStyleAttr)
@param defStyleAttr An attribute in the current theme that contains a reference to a style resource that supplies default values for the view. Can be 0 to not look for defaults.
So you have to do
attrs.xml
<attr name="myCardViewStyle"/>
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="myCardViewStyle">@style/CustomCardView</item>
</style>
<style name="CustomCardView" parent="CardView">
<item name="cardBackgroundColor">@android:color/holo_red_dark</item>
</style>
MyCardView.java
public MyCardView(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.myCardViewStyle);
}
public MyCardView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
That's it.
来源:https://stackoverflow.com/questions/29914671/how-to-add-cardview-attributes-to-app-theme