package android.support.v7.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 float getCardElevation();
    method public int getContentPaddingBottom();
    method public int getContentPaddingLeft();
    method public int getContentPaddingRight();
    method public int getContentPaddingTop();
    method public float getMaxCardElevation();
    method public boolean getPreventCornerOverlap();
    method public float getRadius();
    method public boolean getUseCompatPadding();
    method public void setCardBackgroundColor(int);
    method public void setCardElevation(float);
    method public void setContentPadding(int, int, int, int);
    method public void setMaxCardElevation(float);
    method public void setPreventCornerOverlap(boolean);
    method public void setRadius(float);
    method public void setUseCompatPadding(boolean);
  }

}

