Browse Source

Begin re-implementing debug mode, shows button layout correctly. Also fixed various button/content layout problems.

Aidan Follestad 6 years ago
parent
commit
eeb332099b

+ 1 - 2
core/src/main/java/com/afollestad/materialdialogs/MaterialDialog.kt

@@ -299,8 +299,7 @@ class MaterialDialog(
 
   /** Turns debug mode on or off. Draws spec guides over dialog views. */
   @CheckResult fun debugMode(debugMode: Boolean = true): MaterialDialog {
-//    TODO("Re-enable")
-    //this.view.debugMode = debugMode
+    this.view.debugMode = debugMode
     return this
   }
 

+ 2 - 2
core/src/main/java/com/afollestad/materialdialogs/customview/DialogCustomViewExt.kt

@@ -21,7 +21,7 @@ import androidx.annotation.LayoutRes
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.assertOneSet
 
-internal const val CUSTOM_VIEW_NO_HORIZONTAL_PADDING = "md.custom_view_no_horizontal_padding"
+internal const val CUSTOM_VIEW_NO_VERTICAL_PADDING = "md.custom_view_no_vertical_padding"
 
 /**
  * Gets the custom view for the dialog, set by [customView].
@@ -50,7 +50,7 @@ fun MaterialDialog.customView(
   noVerticalPadding: Boolean = false
 ): MaterialDialog {
   assertOneSet("customView", view, viewRes)
-  config[CUSTOM_VIEW_NO_HORIZONTAL_PADDING] = noVerticalPadding
+  config[CUSTOM_VIEW_NO_VERTICAL_PADDING] = noVerticalPadding
   this.view.contentLayout.addCustomView(
       res = viewRes,
       view = view,

+ 1 - 2
core/src/main/java/com/afollestad/materialdialogs/internal/button/DialogActionButton.kt

@@ -78,8 +78,7 @@ class DialogActionButton(
     setTextColor(enabledColor)
 
     // Selector
-    val selectorAttr = if (stacked) R.attr.md_item_selector else R.attr.md_button_selector
-    val bgDrawable = resolveDrawable(baseContext, attr = selectorAttr)
+    val bgDrawable = resolveDrawable(baseContext, attr = R.attr.md_button_selector)
     if (SDK_INT >= LOLLIPOP && bgDrawable is RippleDrawable) {
       val rippleColor = resolveColor(context = baseContext, attr = R.attr.md_ripple_color)
       if (rippleColor != 0) {

+ 67 - 65
core/src/main/java/com/afollestad/materialdialogs/internal/button/DialogActionButtonLayout.kt

@@ -50,16 +50,15 @@ internal class DialogActionButtonLayout(
     const val INDEX_NEUTRAL = 2
   }
 
-  private val buttonHeightDefault = dimenPx(R.dimen.md_action_button_height)
-  private val buttonHeightStacked = dimenPx(R.dimen.md_stacked_action_button_height)
-  private val buttonFramePadding = dimenPx(R.dimen.md_action_button_frame_padding)
+  private val buttonFramePadding = dimenPx(R.dimen.md_action_button_frame_padding) -
+      dimenPx(R.dimen.md_action_button_inset_horizontal)
   private val buttonFramePaddingNeutral = dimenPx(R.dimen.md_action_button_frame_padding_neutral)
-  private val buttonSpacing = 0
+  private val buttonFrameSpecHeight = dimenPx(R.dimen.md_action_button_frame_spec_height)
 
   private val checkBoxPromptMarginVertical = dimenPx(R.dimen.md_checkbox_prompt_margin_vertical)
   private val checkBoxPromptMarginHorizontal = dimenPx(R.dimen.md_checkbox_prompt_margin_horizontal)
 
-  private var stackButtons: Boolean = false
+  internal var stackButtons: Boolean = false
 
   lateinit var actionButtons: Array<DialogActionButton>
   lateinit var checkBoxPrompt: AppCompatCheckBox
@@ -116,12 +115,12 @@ internal class DialogActionButtonLayout(
       if (stackButtons) {
         button.measure(
             makeMeasureSpec(parentWidth, EXACTLY),
-            makeMeasureSpec(buttonHeightStacked, EXACTLY)
+            makeMeasureSpec(buttonFrameSpecHeight, EXACTLY)
         )
       } else {
         button.measure(
             makeMeasureSpec(0, UNSPECIFIED),
-            makeMeasureSpec(buttonHeightDefault, EXACTLY)
+            makeMeasureSpec(buttonFrameSpecHeight, EXACTLY)
         )
       }
     }
@@ -129,7 +128,7 @@ internal class DialogActionButtonLayout(
     if (visibleButtons.isNotEmpty() && !stackButtons) {
       var totalWidth = 0
       for (button in visibleButtons) {
-        totalWidth += button.measuredWidth + buttonSpacing
+        totalWidth += button.measuredWidth
       }
       if (totalWidth >= parentWidth && !stackButtons) {
         stackButtons = true
@@ -141,7 +140,7 @@ internal class DialogActionButtonLayout(
           )
           button.measure(
               makeMeasureSpec(parentWidth, EXACTLY),
-              makeMeasureSpec(buttonHeightStacked, EXACTLY)
+              makeMeasureSpec(buttonFrameSpecHeight, EXACTLY)
           )
         }
       }
@@ -171,6 +170,7 @@ internal class DialogActionButtonLayout(
       val promptTop: Int
       val promptRight: Int
       val promptBottom: Int
+
       if (isRtl()) {
         promptRight = measuredWidth - checkBoxPromptMarginHorizontal
         promptTop = checkBoxPromptMarginVertical
@@ -182,6 +182,7 @@ internal class DialogActionButtonLayout(
         promptRight = promptLeft + checkBoxPrompt.measuredWidth
         promptBottom = promptTop + checkBoxPrompt.measuredHeight
       }
+
       checkBoxPrompt.layout(
           promptLeft,
           promptTop,
@@ -191,65 +192,66 @@ internal class DialogActionButtonLayout(
     }
 
     if (stackButtons) {
-      var topY = measuredHeight - requiredHeightForButtons()
-      for (button in visibleButtons) {
-        val bottomY = topY + buttonHeightStacked
-        button.layout(0, topY, measuredWidth, bottomY)
-        topY = bottomY
+      val leftX = buttonFramePadding
+      val rightX = measuredWidth - buttonFramePadding
+      var bottomY = measuredHeight
+      for (button in visibleButtons.reversed()) {
+        val topY = bottomY - buttonFrameSpecHeight
+        button.layout(leftX, topY, rightX, bottomY)
+        bottomY = topY
       }
-    } else if (isRtl()) {
-      val topY = measuredHeight - (requiredHeightForButtons() - buttonFramePadding)
+    } else {
+      val topY = measuredHeight - buttonFrameSpecHeight
       val bottomY = measuredHeight - buttonFramePadding
 
-      if (actionButtons[INDEX_NEUTRAL].isVisible()) {
-        val btn = actionButtons[INDEX_NEUTRAL]
-        val rightX = measuredWidth - buttonFramePaddingNeutral
-        btn.layout(
-            rightX - btn.measuredWidth,
-            topY,
-            rightX,
-            bottomY
-        )
-      }
-
-      var leftX = buttonFramePadding
-      if (actionButtons[INDEX_POSITIVE].isVisible()) {
-        val btn = actionButtons[INDEX_POSITIVE]
-        val rightX = leftX + btn.measuredWidth
-        btn.layout(leftX, topY, rightX, bottomY)
-        leftX = rightX + buttonSpacing
-      }
-      if (actionButtons[INDEX_NEGATIVE].isVisible()) {
-        val btn = actionButtons[INDEX_NEGATIVE]
-        val rightX = leftX + btn.measuredWidth
-        btn.layout(leftX, topY, rightX, bottomY)
-      }
-    } else {
-      val topY = measuredHeight - (requiredHeightForButtons() - buttonFramePadding)
-      val bottomY = measuredHeight - 0
+      if (isRtl()) {
+        if (actionButtons[INDEX_NEUTRAL].isVisible()) {
+          val btn = actionButtons[INDEX_NEUTRAL]
+          val rightX = measuredWidth - buttonFramePaddingNeutral
+          btn.layout(
+              rightX - btn.measuredWidth,
+              topY,
+              rightX,
+              bottomY
+          )
+        }
 
-      if (actionButtons[INDEX_NEUTRAL].isVisible()) {
-        val btn = actionButtons[INDEX_NEUTRAL]
-        val leftX = buttonFramePaddingNeutral
-        btn.layout(
-            leftX,
-            topY,
-            leftX + btn.measuredWidth,
-            bottomY
-        )
-      }
+        var leftX = buttonFramePadding
+        if (actionButtons[INDEX_POSITIVE].isVisible()) {
+          val btn = actionButtons[INDEX_POSITIVE]
+          val rightX = leftX + btn.measuredWidth
+          btn.layout(leftX, topY, rightX, bottomY)
+          leftX = rightX
+        }
+        if (actionButtons[INDEX_NEGATIVE].isVisible()) {
+          val btn = actionButtons[INDEX_NEGATIVE]
+          val rightX = leftX + btn.measuredWidth
+          btn.layout(leftX, topY, rightX, bottomY)
+        }
+      } else {
+        if (actionButtons[INDEX_NEUTRAL].isVisible()) {
+          val btn = actionButtons[INDEX_NEUTRAL]
+          val leftX = buttonFramePaddingNeutral
+          btn.layout(
+              leftX,
+              topY,
+              leftX + btn.measuredWidth,
+              bottomY
+          )
+        }
 
-      var rightX = measuredWidth - buttonFramePadding
-      if (actionButtons[INDEX_POSITIVE].isVisible()) {
-        val btn = actionButtons[INDEX_POSITIVE]
-        val leftX = rightX - btn.measuredWidth
-        btn.layout(leftX, topY, rightX, bottomY)
-        rightX = leftX - buttonSpacing
-      }
-      if (actionButtons[INDEX_NEGATIVE].isVisible()) {
-        val btn = actionButtons[INDEX_NEGATIVE]
-        val leftX = rightX - btn.measuredWidth
-        btn.layout(leftX, topY, rightX, bottomY)
+        var rightX = measuredWidth - buttonFramePadding
+        if (actionButtons[INDEX_POSITIVE].isVisible()) {
+          val btn = actionButtons[INDEX_POSITIVE]
+          val leftX = rightX - btn.measuredWidth
+          btn.layout(leftX, topY, rightX, bottomY)
+          rightX = leftX
+        }
+        if (actionButtons[INDEX_NEGATIVE].isVisible()) {
+          val btn = actionButtons[INDEX_NEGATIVE]
+          val leftX = rightX - btn.measuredWidth
+          btn.layout(leftX, topY, rightX, bottomY)
+        }
       }
     }
   }
@@ -270,7 +272,7 @@ internal class DialogActionButtonLayout(
 
   private fun requiredHeightForButtons() = when {
     visibleButtons.isEmpty() -> 0
-    stackButtons -> (visibleButtons.size * buttonHeightStacked) + buttonFramePadding
-    else -> buttonHeightDefault + (buttonFramePadding * 2)
+    stackButtons -> visibleButtons.size * buttonFrameSpecHeight
+    else -> buttonFrameSpecHeight
   }
 }

+ 151 - 4
core/src/main/java/com/afollestad/materialdialogs/internal/main/DialogLayout.kt

@@ -16,6 +16,14 @@
 package com.afollestad.materialdialogs.internal.main
 
 import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Color.BLUE
+import android.graphics.Color.CYAN
+import android.graphics.Color.MAGENTA
+import android.graphics.Color.RED
+import android.graphics.Color.YELLOW
+import android.graphics.Paint
+import android.graphics.Paint.Style.FILL
 import android.util.AttributeSet
 import android.view.View.MeasureSpec.AT_MOST
 import android.view.View.MeasureSpec.EXACTLY
@@ -23,10 +31,14 @@ import android.view.View.MeasureSpec.UNSPECIFIED
 import android.view.View.MeasureSpec.getSize
 import android.view.View.MeasureSpec.makeMeasureSpec
 import android.widget.FrameLayout
+import androidx.annotation.ColorInt
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.R
 import com.afollestad.materialdialogs.internal.button.DialogActionButtonLayout
 import com.afollestad.materialdialogs.utils.MDUtil.dimenPx
+import com.afollestad.materialdialogs.utils.dp
+import com.afollestad.materialdialogs.utils.isRtl
+import com.afollestad.materialdialogs.utils.isVisible
 
 /**
  * The root layout of a dialog. Contains a [DialogTitleLayout], [DialogContentLayout],
@@ -40,7 +52,14 @@ internal class DialogLayout(
 ) : FrameLayout(context, attrs) {
 
   var maxHeight: Int = 0
+  var debugMode: Boolean = false
+    set(value) {
+      field = value
+      setWillNotDraw(!value)
+    }
+  private var debugPaint: Paint? = null
 
+  internal val frameMarginVertical = dimenPx(R.dimen.md_dialog_frame_margin_vertical)
   internal val frameMarginVerticalLess = dimenPx(R.dimen.md_dialog_frame_margin_vertical_less)
 
   internal lateinit var dialog: MaterialDialog
@@ -48,10 +67,6 @@ internal class DialogLayout(
   internal lateinit var contentLayout: DialogContentLayout
   internal lateinit var buttonsLayout: DialogActionButtonLayout
 
-  init {
-    setWillNotDraw(false)
-  }
-
   override fun onFinishInflate() {
     super.onFinishInflate()
     titleLayout = findViewById(R.id.md_title_layout)
@@ -143,4 +158,136 @@ internal class DialogLayout(
         buttonsTop
     )
   }
+
+  override fun onDraw(canvas: Canvas) {
+    super.onDraw(canvas)
+    if (!debugMode) return
+
+    // Blue line on dialog left boundary
+    canvas.verticalLine(BLUE, start = dp(24))
+    // Blue line on dialog top boundary
+    canvas.horizontalLine(BLUE, start = dp(24))
+    // Blue line on dialog right boundary
+    canvas.verticalLine(BLUE, start = measuredWidth - dp(24))
+
+    // Red line under title layout
+    if (titleLayout.isVisible()) {
+      canvas.horizontalLine(RED, start = titleLayout.bottom.toFloat())
+    }
+    // Yellow line above content layout
+    if (contentLayout.isVisible()) {
+      canvas.horizontalLine(YELLOW, start = contentLayout.top.toFloat())
+    }
+
+    // Fill background of actual buttons
+    if (!buttonsLayout.shouldBeVisible()) {
+      return
+    }
+
+    // Cyan line on the end edge of the buttons
+    val buttonsRight = if (isRtl()) {
+      dp(8)
+    } else {
+      measuredWidth.toFloat() - dp(8)
+    }
+    canvas.verticalLine(CYAN, start = buttonsRight)
+
+    if (buttonsLayout.stackButtons) {
+      // Fill visible parts of buttons
+      var currentTop = buttonsLayout.top + dp(8)
+      for (button in buttonsLayout.visibleButtons) {
+        val currentBottom = currentTop + dp(36)
+        canvas.box(
+            CYAN,
+            alpha = .4f,
+            left = button.left.toFloat(),
+            right = measuredWidth.toFloat() - dp(8),
+            top = currentTop,
+            bottom = currentBottom
+        )
+        currentTop = currentBottom + dp(16)
+      }
+
+      // Blue line over the top of the buttons layout
+      canvas.horizontalLine(BLUE, start = buttonsLayout.top.toFloat())
+
+      // Red line over the top edge of the buttons
+      val buttonsTop = buttonsLayout.top.toFloat() + dp(8)
+      val buttonsBottom = measuredHeight.toFloat() - dp(8)
+      canvas.horizontalLine(RED, start = buttonsTop)
+      canvas.horizontalLine(RED, start = buttonsBottom)
+    } else {
+      // Fill visible parts of buttons
+      for (button in buttonsLayout.visibleButtons) {
+        val top = buttonsLayout.top + button.top.toFloat() + dp(8)
+        val bottom = buttonsLayout.bottom.toFloat() - dp(8)
+        val left = button.left.toFloat() + dp(4)
+        val right = button.right.toFloat() - dp(4)
+        canvas.box(
+            CYAN,
+            alpha = .4f,
+            left = left,
+            right = right,
+            top = top,
+            bottom = bottom
+        )
+      }
+
+      // Magenta line over the top of the buttons layout
+      canvas.horizontalLine(MAGENTA, start = buttonsLayout.top.toFloat())
+      // Red line over the top and bottom edge of the buttons
+      val buttonsTop = measuredHeight.toFloat() - (dp(52) - dp(8))
+      val buttonsBottom = measuredHeight.toFloat() - dp(8)
+      canvas.horizontalLine(RED, start = buttonsTop)
+      canvas.horizontalLine(RED, start = buttonsBottom)
+      // Blue line over the top of the buttons with inset
+      canvas.horizontalLine(BLUE, start = buttonsTop - dp(8))
+    }
+  }
+
+  private fun paint(
+    color: Int,
+    alpha: Float = 1f
+  ): Paint {
+    if (debugPaint == null) {
+      debugPaint = Paint().apply {
+        strokeWidth = dp(1)
+        style = FILL
+        isAntiAlias = true
+      }
+    }
+    return debugPaint!!.also {
+      it.color = color
+      setAlpha(alpha)
+    }
+  }
+
+  private fun Canvas.box(
+    @ColorInt color: Int,
+    alpha: Float = 1f,
+    left: Float,
+    right: Float,
+    top: Float,
+    bottom: Float
+  ) = drawRect(left, top, right, bottom, paint(color, alpha))
+
+  private fun Canvas.line(
+    @ColorInt color: Int,
+    left: Float = 0f,
+    right: Float = left,
+    top: Float = 0f,
+    bottom: Float = top
+  ) = drawLine(left, top, right, bottom, paint(color))
+
+  private fun Canvas.verticalLine(
+    @ColorInt color: Int,
+    start: Float,
+    width: Float = start
+  ) = line(color, left = start, right = width, top = 0f, bottom = measuredHeight.toFloat())
+
+  private fun Canvas.horizontalLine(
+    @ColorInt color: Int,
+    start: Float = measuredHeight.toFloat(),
+    height: Float = start
+  ) = line(color, left = 0f, right = measuredWidth.toFloat(), top = start, bottom = height)
 }

+ 11 - 10
core/src/main/java/com/afollestad/materialdialogs/utils/DialogExt.kt

@@ -38,7 +38,7 @@ import com.afollestad.materialdialogs.WhichButton.POSITIVE
 import com.afollestad.materialdialogs.actions.getActionButton
 import com.afollestad.materialdialogs.callbacks.invokeAll
 import com.afollestad.materialdialogs.checkbox.getCheckBoxPrompt
-import com.afollestad.materialdialogs.customview.CUSTOM_VIEW_NO_HORIZONTAL_PADDING
+import com.afollestad.materialdialogs.customview.CUSTOM_VIEW_NO_VERTICAL_PADDING
 import com.afollestad.materialdialogs.utils.MDUtil.maybeSetTextColor
 import com.afollestad.materialdialogs.utils.MDUtil.resolveDrawable
 import com.afollestad.materialdialogs.utils.MDUtil.resolveString
@@ -67,10 +67,11 @@ internal fun MaterialDialog.setWindowConstraints() {
     val calculatedWidth = windowWidth - windowHorizontalPadding * 2
 
     view.maxHeight = windowHeight - windowVerticalPadding * 2
-    val lp = WindowManager.LayoutParams().apply {
-      copyFrom(win.attributes)
-      width = min(maxWidth, calculatedWidth)
-    }
+    val lp = WindowManager.LayoutParams()
+        .apply {
+          copyFrom(win.attributes)
+          width = min(maxWidth, calculatedWidth)
+        }
     win.attributes = lp
   }
 }
@@ -95,15 +96,15 @@ fun MaterialDialog.invalidateDividers(
 ) = view.invalidateDividers(scrolledDown, atBottom)
 
 internal fun MaterialDialog.preShow() {
-  val customViewNoHorizontalPadding = config[CUSTOM_VIEW_NO_HORIZONTAL_PADDING] as? Boolean == true
+  val customViewNoVerticalPadding = config[CUSTOM_VIEW_NO_VERTICAL_PADDING] as? Boolean == true
   this.preShowListeners.invokeAll(this)
 
   this.view.run {
-    if (titleLayout.shouldNotBeVisible() && !customViewNoHorizontalPadding) {
-      // Reduce top and bottom padding if we have no title
+    if (titleLayout.shouldNotBeVisible() && !customViewNoVerticalPadding) {
+      // Reduce top and bottom padding if we have no title or buttons
       contentLayout.modifyFirstAndLastPadding(
-          top = frameMarginVerticalLess,
-          bottom = frameMarginVerticalLess
+          top = frameMarginVertical,
+          bottom = frameMarginVertical
       )
     }
     if (getCheckBoxPrompt().isVisible()) {

+ 7 - 0
core/src/main/java/com/afollestad/materialdialogs/utils/DimensExt.kt

@@ -15,6 +15,9 @@
  */
 package com.afollestad.materialdialogs.utils
 
+import android.util.TypedValue
+import android.util.TypedValue.COMPLEX_UNIT_DIP
+import android.view.View
 import androidx.annotation.AttrRes
 import androidx.annotation.DimenRes
 import com.afollestad.materialdialogs.MaterialDialog
@@ -38,3 +41,7 @@ internal fun MaterialDialog.dimen(
     a.recycle()
   }
 }
+
+internal fun View.dp(value: Int): Float {
+  return TypedValue.applyDimension(COMPLEX_UNIT_DIP, value.toFloat(), resources.displayMetrics)
+}

+ 2 - 2
core/src/main/res/values-sw600dp/dimens.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-  <dimen name="md_dialog_max_width">446dp</dimen>
+  <dimen name="md_dialog_max_width">304dp</dimen>
 
-</resources>
+</resources>

+ 2 - 2
core/src/main/res/values-sw720dp-land/dimens.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-  <dimen name="md_dialog_max_width">564dp</dimen>
+  <dimen name="md_dialog_max_width">560dp</dimen>
 
-</resources>
+</resources>

+ 4 - 5
core/src/main/res/values/dimens.xml

@@ -1,8 +1,8 @@
 <!-- See https://material.io/archive/guidelines/components/dialogs.html#dialogs-specs -->
 <resources>
 
+  <dimen name="md_dialog_max_width">280dp</dimen>
   <dimen name="md_dialog_default_corner_radius">2dp</dimen>
-  <dimen name="md_dialog_max_width">356dp</dimen>
   <dimen name="md_dialog_vertical_margin">52dp</dimen>
   <dimen name="md_dialog_horizontal_margin">32dp</dimen>
 
@@ -11,21 +11,20 @@
   <dimen name="md_dialog_frame_margin_vertical_less">16dp</dimen>
   <dimen name="md_dialog_frame_margin_horizontal">24dp</dimen>
 
+  <dimen name="md_action_button_frame_spec_height">52dp</dimen>
   <dimen name="md_action_button_frame_padding_neutral">18dp</dimen>
   <dimen name="md_action_button_frame_padding">8dp</dimen>
-  <dimen name="md_action_button_inset_vertical">6dp</dimen>
+  <dimen name="md_action_button_inset_vertical">8dp</dimen>
   <dimen name="md_action_button_inset_horizontal">4dp</dimen>
   <dimen name="md_action_button_padding_horizontal">12dp</dimen>
   <dimen name="md_action_button_padding_vertical">4dp</dimen>
 
-  <dimen name="md_action_button_height">48dp</dimen>
   <dimen name="md_action_button_min_width">64dp</dimen>
   <dimen name="md_action_button_spacing">8dp</dimen>
   <dimen name="md_action_button_corner_radius">2dp</dimen>
   <dimen name="md_action_button_textsize">14sp</dimen>
 
   <dimen name="md_checkbox_prompt_height">48dp</dimen>
-  <dimen name="md_stacked_action_button_height">48dp</dimen>
   <dimen name="md_stacked_action_button_padding_horizontal">16dp</dimen>
 
   <dimen name="md_title_textsize">20sp</dimen>
@@ -42,7 +41,7 @@
   <dimen name="md_listitem_margin_left">24dp</dimen>
 
   <dimen name="md_checkbox_prompt_margin_horizontal">16dp</dimen>
-  <dimen name="md_checkbox_prompt_margin_vertical">10dp</dimen>
+  <dimen name="md_checkbox_prompt_margin_vertical">4dp</dimen>
   <dimen name="md_divider_height">1dp</dimen>
 
 </resources>

+ 10 - 0
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.kt

@@ -54,6 +54,7 @@ import kotlinx.android.synthetic.main.activity_main.basic_html_content
 import kotlinx.android.synthetic.main.activity_main.basic_icon
 import kotlinx.android.synthetic.main.activity_main.basic_long
 import kotlinx.android.synthetic.main.activity_main.basic_long_titled_buttons
+import kotlinx.android.synthetic.main.activity_main.basic_stacked_buttons
 import kotlinx.android.synthetic.main.activity_main.basic_titled
 import kotlinx.android.synthetic.main.activity_main.basic_titled_buttons
 import kotlinx.android.synthetic.main.activity_main.buttons_callbacks
@@ -156,6 +157,15 @@ class MainActivity : AppCompatActivity() {
       }
     }
 
+    basic_stacked_buttons.setOnClickListener {
+      MaterialDialog(this).show {
+        message(R.string.useGoogleLocationServicesPrompt)
+        positiveButton(text = "This is a long button")
+        negativeButton(text = "So is this, these should stack")
+        debugMode(debugMode)
+      }
+    }
+
     basic_titled_buttons.setOnClickListener {
       MaterialDialog(this).show {
         title(R.string.useGoogleLocationServices)

+ 6 - 0
sample/src/main/res/layout/activity_main.xml

@@ -40,6 +40,12 @@
         style="@style/SampleButton"
         />
 
+    <Button
+        android:id="@+id/basic_stacked_buttons"
+        android:text="Basic + Stacked Buttons"
+        style="@style/SampleButton"
+        />
+
     <Button
         android:id="@+id/basic_titled_buttons"
         android:text="Basic + Title + Buttons"