// Signature format: 3.0
package androidx.cardview.widget {

  public class CardView extends android.widget.FrameLayout {
    ctor public CardView(android.content.Context);
    ctor public CardView(android.content.Context, android.util.AttributeSet?);
    ctor public CardView(android.content.Context, android.util.AttributeSet?, int);
    method public android.content.res.ColorStateList getCardBackgroundColor();
    method public float getCardElevation();
    method @Px public int getContentPaddingBottom();
    method @Px public int getContentPaddingLeft();
    method @Px public int getContentPaddingRight();
    method @Px public int getContentPaddingTop();
    method public float getMaxCardElevation();
    method public boolean getPreventCornerOverlap();
    method public float getRadius();
    method public boolean getUseCompatPadding();
    method public void setCardBackgroundColor(@ColorInt int);
    method public void setCardBackgroundColor(android.content.res.ColorStateList?);
    method public void setCardElevation(float);
    method public void setContentPadding(@Px int, @Px int, @Px int, @Px int);
    method public void setMaxCardElevation(float);
    method public void setPreventCornerOverlap(boolean);
    method public void setRadius(float);
    method public void setUseCompatPadding(boolean);
  }

}

