Skip to content

Commit c99cba6

Browse files
imhappidrchen
authored andcommitted
[MaterialCardView] Add drawable states that MaterialCardView should still respect, even if duplicating its parent state
PiperOrigin-RevId: 800720830
1 parent 273e59b commit c99cba6

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

lib/java/com/google/android/material/card/MaterialCardView.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public interface OnCheckedChangeListener {
9898
private static final int[] CHECKABLE_STATE_SET = {android.R.attr.state_checkable};
9999
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
100100
private static final int[] DRAGGED_STATE_SET = {R.attr.state_dragged};
101+
private static final int[] HOVERED_STATE_SET = {android.R.attr.state_hovered};
101102

102103
private static final int DEF_STYLE_RES = R.style.Widget_MaterialComponents_CardView;
103104
private static final String LOG_TAG = "MaterialCardView";
@@ -492,7 +493,7 @@ public void toggle() {
492493

493494
@Override
494495
protected int[] onCreateDrawableState(int extraSpace) {
495-
final int[] drawableState = super.onCreateDrawableState(extraSpace + 3);
496+
final int[] drawableState = super.onCreateDrawableState(extraSpace + 8);
496497
if (isCheckable()) {
497498
mergeDrawableStates(drawableState, CHECKABLE_STATE_SET);
498499
}
@@ -505,6 +506,28 @@ protected int[] onCreateDrawableState(int extraSpace) {
505506
mergeDrawableStates(drawableState, DRAGGED_STATE_SET);
506507
}
507508

509+
if (isDuplicateParentStateEnabled()) {
510+
if (isPressed()) {
511+
mergeDrawableStates(drawableState, PRESSED_STATE_SET);
512+
}
513+
514+
if (isHovered()) {
515+
mergeDrawableStates(drawableState, HOVERED_STATE_SET);
516+
}
517+
518+
if (isEnabled()) {
519+
mergeDrawableStates(drawableState, ENABLED_STATE_SET);
520+
}
521+
522+
if (isFocused()) {
523+
mergeDrawableStates(drawableState, FOCUSED_STATE_SET);
524+
}
525+
526+
if (isSelected()) {
527+
mergeDrawableStates(drawableState, SELECTED_STATE_SET);
528+
}
529+
}
530+
508531
return drawableState;
509532
}
510533

0 commit comments

Comments
 (0)