content: package com.afollestad.materialdialogs.internal;
  
  import android.annotation.SuppressLint;
  import android.content.Context;
  import android.graphics.drawable.Drawable;
  import android.os.Build;
  import android.util.AttributeSet;
  import android.view.Gravity;
  import android.widget.TextView;
  import com.afollestad.materialdialogs.GravityEnum;
  import com.afollestad.materialdialogs.R;
  import com.afollestad.materialdialogs.util.DialogUtils;
  
  /** @author Kevin Barry (teslacoil) 4/02/2015 */
  @SuppressLint("AppCompatCustomView")
  public class MDButton extends TextView {
  
    private boolean stacked = false;
    private GravityEnum stackedGravity;
  
    private int stackedEndPadding;
    private Drawable stackedBackground;
    private Drawable defaultBackground;
  
    public MDButton(Context context, AttributeSet attrs) {
      super(context, attrs);
      init(context);
    }
  
    public MDButton(Context context, AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
      init(context);
    }
  
    private void init(Context context) {
      stackedEndPadding =
          context.getResources().getDimensionPixelSize(R.dimen.md_dialog_frame_margin);
      stackedGravity = GravityEnum.END;
    }
  
    /**
     * Set if the button should be displayed in stacked mode. This should only be called from
     * MDRootLayout's onMeasure, and we must be measured after calling this.
     */
    /* package */ void setStacked(boolean stacked, boolean force) {
      if (this.stacked != stacked || force) {
  
        setGravity(
            stacked ? (Gravity.CENTER_VERTICAL | stackedGravity.getGravityInt()) : Gravity.CENTER);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
          //noinspection ResourceType
          setTextAlignment(stacked ? stackedGravity.getTextAlignment() : TEXT_ALIGNMENT_CENTER);
        }
  
        DialogUtils.setBackgroundCompat(this, stacked ? stackedBackground : defaultBackground);
        if (stacked) {
          setPadding(stackedEndPadding, getPaddingTop(), stackedEndPadding, getPaddingBottom());
        } /* Else the padding was properly reset by the drawable */
  
        this.stacked = stacked;
      }
    }
  
    public void setStackedGravity(GravityEnum gravity) {
      stackedGravity = gravity;
    }
  
    public void setStackedSelector(Drawable d) {
      stackedBackground = d;
      if (stacked) {
        setStacked(true, true);
      }
    }
  
    public void setDefaultSelector(Drawable d) {
      defaultBackground = d;
      if (!stacked) {
        setStacked(false, true);
      }
    }
  
    public void setAllCapsCompat(boolean allCaps) {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        setAllCaps(allCaps);
      } else {
        if (allCaps) {
          setTransformationMethod(new AllCapsTransformationMethod(getContext()));
        } else {
          setTransformationMethod(null);
        }
      }
    }
  }
  