MDButton.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package com.afollestad.materialdialogs.internal;
  2. import android.annotation.TargetApi;
  3. import android.content.Context;
  4. import android.graphics.drawable.Drawable;
  5. import android.os.Build;
  6. import android.support.v7.internal.text.AllCapsTransformationMethod;
  7. import android.util.AttributeSet;
  8. import android.view.Gravity;
  9. import android.widget.TextView;
  10. import com.afollestad.materialdialogs.GravityEnum;
  11. import com.afollestad.materialdialogs.R;
  12. import com.afollestad.materialdialogs.util.DialogUtils;
  13. /**
  14. * @author Kevin Barry (teslacoil) 4/02/2015
  15. */
  16. public class MDButton extends TextView {
  17. private boolean mStacked = false;
  18. private GravityEnum mStackedGravity;
  19. private int mStackedEndPadding;
  20. private Drawable mStackedBackground;
  21. private Drawable mDefaultBackground;
  22. public MDButton(Context context, AttributeSet attrs) {
  23. super(context, attrs);
  24. init(context, attrs, 0, 0);
  25. }
  26. public MDButton(Context context, AttributeSet attrs, int defStyleAttr) {
  27. super(context, attrs, defStyleAttr);
  28. init(context, attrs, defStyleAttr, 0);
  29. }
  30. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  31. public MDButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  32. super(context, attrs, defStyleAttr, defStyleRes);
  33. init(context, attrs, defStyleAttr, defStyleRes);
  34. }
  35. private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  36. mStackedEndPadding = context.getResources()
  37. .getDimensionPixelSize(R.dimen.md_dialog_frame_margin);
  38. mStackedGravity = GravityEnum.END;
  39. }
  40. /**
  41. * Set if the button should be displayed in stacked mode.
  42. * This should only be called from MDRootLayout's onMeasure, and we must be measured
  43. * after calling this.
  44. */
  45. /* package */ void setStacked(boolean stacked, boolean force) {
  46. if (mStacked != stacked || force) {
  47. setGravity(stacked ? (Gravity.CENTER_VERTICAL | mStackedGravity.getGravityInt()) : Gravity.CENTER);
  48. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
  49. //noinspection ResourceType
  50. setTextAlignment(stacked ? mStackedGravity.getTextAlignment() : TEXT_ALIGNMENT_CENTER);
  51. }
  52. DialogUtils.setBackgroundCompat(this, stacked ? mStackedBackground : mDefaultBackground);
  53. if (stacked) {
  54. setPadding(mStackedEndPadding, getPaddingTop(), mStackedEndPadding, getPaddingBottom());
  55. } /* Else the padding was properly reset by the drawable */
  56. }
  57. }
  58. public void setStackedGravity(GravityEnum gravity) {
  59. mStackedGravity = gravity;
  60. }
  61. public void setStackedSelector(Drawable d) {
  62. mStackedBackground = d;
  63. if (mStacked)
  64. setStacked(true, true);
  65. }
  66. public void setDefaultSelector(Drawable d) {
  67. mDefaultBackground = d;
  68. if (!mStacked)
  69. setStacked(false, true);
  70. }
  71. public void setAllCapsCompat(boolean allCaps) {
  72. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
  73. setAllCaps(allCaps);
  74. } else {
  75. if (allCaps)
  76. setTransformationMethod(new AllCapsTransformationMethod(getContext()));
  77. else
  78. setTransformationMethod(null);
  79. }
  80. }
  81. }