瀏覽代碼

Fix stacking algorithm;
also tweak button min-width and button frame margins for insets

plusCubed 10 年之前
父節點
當前提交
6e9ab59119

+ 6 - 10
library/src/main/java/com/afollestad/materialdialogs/MaterialDialog.java

@@ -8,7 +8,6 @@ import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.database.DataSetObserver;
 import android.graphics.Color;
-import android.graphics.Paint;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
@@ -392,13 +391,12 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
 
     private int calculateMaxButtonWidth() {
         /**
-         * Max button width = (DialogWidth - 16dp - 16dp - 8dp) / 2
+         * Max button width = (DialogWidth - Side margins) / [Number of buttons]
          * From: http://www.google.com/design/spec/components/dialogs.html#dialogs-specs
          */
         final int dialogWidth = getWindow().getDecorView().getMeasuredWidth();
-        final int eightDp = (int) getContext().getResources().getDimension(R.dimen.md_button_padding_horizontal);
-        final int sixteenDp = (int) getContext().getResources().getDimension(R.dimen.md_button_padding_frame_side);
-        return (dialogWidth - sixteenDp - sixteenDp - eightDp) / 2;
+        final int margins = (int) getContext().getResources().getDimension(R.dimen.md_button_padding_frame_side);
+        return (dialogWidth - 2 * margins) / numberOfActionButtons();
     }
 
     /**
@@ -432,12 +430,10 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         }
         final int maxWidth = calculateMaxButtonWidth();
         Log.v("MD_Stacking", "Max button width: " + maxWidth);
-        final Paint paint = positiveButton.getPaint();
-        final int eightDp = (int) getContext().getResources().getDimension(R.dimen.md_button_padding_horizontal);
         isStacked = false;
 
         if (this.positiveText != null) {
-            final int positiveWidth = (int) paint.measureText(positiveButton.getText().toString()) + eightDp;
+            final int positiveWidth = positiveButton.getWidth();
             isStacked = positiveWidth > maxWidth;
             Log.v("MD_Stacking", "Positive button width: " + positiveWidth);
         } else {
@@ -445,7 +441,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         }
 
         if (!isStacked && this.neutralText != null) {
-            final int neutralWidth = (int) paint.measureText(neutralButton.getText().toString()) + eightDp;
+            final int neutralWidth = neutralButton.getWidth();
             isStacked = neutralWidth > maxWidth;
             Log.v("MD_Stacking", "Neutral button width: " + neutralWidth);
         } else {
@@ -453,7 +449,7 @@ public class MaterialDialog extends DialogBase implements View.OnClickListener,
         }
 
         if (!isStacked && this.negativeText != null) {
-            final int negativeWidth = (int) paint.measureText(negativeButton.getText().toString()) + eightDp;
+            final int negativeWidth = negativeButton.getWidth();
             isStacked = negativeWidth > maxWidth;
             Log.v("MD_Stacking", "Negative button width: " + negativeWidth);
         } else {

+ 8 - 3
library/src/main/res/values/dimens.xml

@@ -6,7 +6,9 @@
     <dimen name="md_dialog_frame_margin">24dp</dimen>
     <dimen name="md_main_frame_margin">16dp</dimen>
     <dimen name="md_title_margin_plainlist">8dp</dimen>
-    <dimen name="md_button_min_width">64dp</dimen>
+
+    <!-- 64dp + 8dp (left and right insets) -->
+    <dimen name="md_button_min_width">72dp</dimen>
 
     <!-- Above and below buttons, 36+12=48 for the height of the button frame -->
     <dimen name="md_button_inset_vertical">6dp</dimen>
@@ -15,10 +17,13 @@
     <dimen name="md_button_padding_vertical">4dp</dimen>
 
     <dimen name="md_button_padding_horizontal_internalexternal">32dp</dimen>
-    <dimen name="md_button_padding_frame_side">16dp</dimen>
+
+    <!-- 16dp - 4dp (inset) -->
+    <dimen name="md_button_padding_frame_side">12dp</dimen>
+    <dimen name="md_neutral_button_margin">12dp</dimen>
+
     <dimen name="md_button_padding_frame_bottom">8dp</dimen>
     <dimen name="md_button_height">48dp</dimen>
-    <dimen name="md_neutral_button_margin">16dp</dimen>
 
     <dimen name="md_title_textsize">20sp</dimen>
     <dimen name="md_content_textsize">18sp</dimen>