CardView uses elevation property on Lollipop for shadows and falls back to a
custom emulated shadow implementation on older platforms.

Due to expensive nature of rounded corner clipping, on platforms before Lollipop, CardView does
not clip its children that intersect with rounded corners. Instead, it adds padding to avoid such
intersection (See setPreventCornerOverlap(boolean) to change this behavior).

Before Lollipop, CardView adds padding to its content and draws shadows to that area. This
padding amount is equal to maxCardElevation + (1 - cos45) * cornerRadius on the
sides and maxCardElevation * 1.5 + (1 - cos45) * cornerRadius on top and bottom.

Since padding is used to offset content for shadows, you cannot set padding on CardView.
Instead, you can use content padding attributes in XML or
setContentPadding(int, int, int, int) in code to set the padding between the edges of
the CardView and children of CardView.

Note that, if you specify exact dimensions for the CardView, because of the shadows, its content
area will be different between platforms before Lollipop and after Lollipop. By using api version
specific resource values, you can avoid these changes. Alternatively, If you want CardView to add
inner padding on platforms Lollipop and after as well, you can call
setUseCompatPadding(boolean) and pass true.

To change CardView's elevation in a backward compatible way, use
setCardElevation(float). CardView will use elevation API on Lollipop and before
Lollipop, it will change the shadow size. To avoid moving the View while shadow size is changing,
shadow size is clamped by getMaxCardElevation(). If you want to change elevation
dynamically, you should call setMaxCardElevation(float) when CardView is initialized.

setPreventCornerOverlap

On pre-Lollipop platforms, CardView does not clip the bounds of the Card for the rounded
corners. Instead, it adds padding to content so that it won't overlap with the rounded
corners. You can disable this behavior by setting this field to false.

Setting this value on Lollipop and above does not have any effect unless you have enabled
compatibility padding.

setUseCompatPadding

This may cause Cards to have different sizes between Lollipop and before Lollipop. If you
need to align CardView with other Views, you may need api version specific dimension
resources to account for the changes.
As an alternative, you can set this flag to true and CardView will add the same
padding values on platforms Lollipop and after.

Since setting this flag to true adds unnecessary gaps in the UI, default value is
false.