diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentsheet/AddPaymentMethodsAdapter.kt b/paymentsheet/src/main/java/com/stripe/android/paymentsheet/AddPaymentMethodsAdapter.kt index bce1b1c276e..7f7ba197b19 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentsheet/AddPaymentMethodsAdapter.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentsheet/AddPaymentMethodsAdapter.kt @@ -32,11 +32,21 @@ internal class AddPaymentMethodsAdapter( val targetWidth = parent.measuredWidth - parent.paddingStart - parent.paddingEnd val minItemWidth = 100 * parent.context.resources.displayMetrics.density + itemView.marginEnd + itemView.marginStart - // numVisibleItems is incremented in steps of 0.5 items (1, 1.5, 2, 2.5, 3, ...) - val numVisibleItems = (targetWidth * 2 / minItemWidth).toInt() / 2f + + // if all items fit at min width, then span them across the sheet evenly filling it. + // otherwise the number of items visible should be a multiple of .5 val viewWidth = - targetWidth / numVisibleItems - itemView.marginEnd - itemView.marginStart - itemView.layoutParams.width = viewWidth.toInt() + if (minItemWidth * paymentMethods.size < targetWidth) { + targetWidth / paymentMethods.size + } else { + // numVisibleItems is incremented in steps of 0.5 items + // (1, 1.5, 2, 2.5, 3, ...) + val numVisibleItems = (targetWidth * 2 / minItemWidth).toInt() / 2f + targetWidth / numVisibleItems + } + + itemView.layoutParams.width = + viewWidth.toInt() - itemView.marginEnd - itemView.marginStart itemView.setOnClickListener { onItemSelected(bindingAdapterPosition) }