Browse Source

Add md_line_spacing_body attribute to set a global default line spacing for dialog messages. Resolves #1903.

Aidan Follestad 5 years ago
parent
commit
2f7c932f9d

+ 13 - 0
core/src/main/java/com/afollestad/materialdialogs/message/DialogMessageSettings.kt

@@ -20,7 +20,9 @@ import android.text.method.LinkMovementMethod
 import android.widget.TextView
 import androidx.annotation.StringRes
 import com.afollestad.materialdialogs.MaterialDialog
+import com.afollestad.materialdialogs.R
 import com.afollestad.materialdialogs.internal.message.LinkTransformationMethod
+import com.afollestad.materialdialogs.utils.MDUtil.resolveFloat
 import com.afollestad.materialdialogs.utils.MDUtil.resolveString
 
 /** @author Aidan Follestad (@afollestad) */
@@ -30,8 +32,10 @@ class DialogMessageSettings internal constructor(
   val messageTextView: TextView
 ) {
   private var isHtml: Boolean = false
+  private var didSetLineSpacing: Boolean = false
 
   fun lineSpacing(multiplier: Float): DialogMessageSettings {
+    didSetLineSpacing = true
     messageTextView.setLineSpacing(0f, multiplier)
     return this
   }
@@ -49,6 +53,15 @@ class DialogMessageSettings internal constructor(
     @StringRes res: Int?,
     text: CharSequence?
   ) {
+    if (!didSetLineSpacing) {
+      lineSpacing(
+          resolveFloat(
+              context = dialog.windowContext,
+              attr = R.attr.md_line_spacing_body,
+              defaultValue = 1.1f
+          )
+      )
+    }
     messageTextView.text = text.maybeWrapHtml(isHtml)
         ?: resolveString(dialog, res, html = isHtml)
   }

+ 14 - 1
core/src/main/java/com/afollestad/materialdialogs/utils/MDUtil.kt

@@ -129,7 +129,7 @@ object MDUtil {
   ): IntArray {
     val a = context.theme.obtainStyledAttributes(attrs)
     try {
-      return (0 until attrs.size).map { index ->
+      return attrs.indices.map { index ->
         val color = a.getColor(index, 0)
         return@map if (color != 0) {
           color
@@ -169,6 +169,19 @@ object MDUtil {
     }
   }
 
+  @RestrictTo(LIBRARY_GROUP) fun resolveFloat(
+    context: Context,
+    @AttrRes attr: Int,
+    defaultValue: Float = 0f
+  ): Float {
+    val a = context.theme.obtainStyledAttributes(intArrayOf(attr))
+    try {
+      return a.getFloat(0, defaultValue)
+    } finally {
+      a.recycle()
+    }
+  }
+
   @RestrictTo(LIBRARY_GROUP) fun Int.isColorDark(threshold: Double = 0.5): Boolean {
     if (this == Color.TRANSPARENT) {
       return false

+ 1 - 0
core/src/main/res-public/values/public.xml

@@ -11,6 +11,7 @@
   <attr format="reference" name="md_font_title"/>
   <attr format="reference" name="md_font_body"/>
   <attr format="reference" name="md_font_button"/>
+  <attr format="float" name="md_line_spacing_body"/>
   <attr format="enum" name="md_button_casing">
     <enum name="upper" value="1"/>
     <enum name="literal" value="2"/>