diff --git a/ui/BankingAndroidApp/src/main/java/net/dankito/banking/ui/android/views/MaxHeightScrollView.kt b/ui/BankingAndroidApp/src/main/java/net/dankito/banking/ui/android/views/MaxHeightScrollView.kt new file mode 100644 index 00000000..ba93ede2 --- /dev/null +++ b/ui/BankingAndroidApp/src/main/java/net/dankito/banking/ui/android/views/MaxHeightScrollView.kt @@ -0,0 +1,42 @@ +package net.dankito.banking.ui.android.views + +import android.content.Context +import android.util.AttributeSet +import android.widget.ScrollView + + +open class MaxHeightScrollView @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 +) : ScrollView(context, attrs, defStyleAttr) { + + companion object { + const val DisableMaxHeight = -1 + } + + + open var maxHeightInPixel = DisableMaxHeight + protected set + + + open fun setMaxHeightInDp(maxHeightInDp: Int) { + val density = resources.displayMetrics.density + maxHeightInPixel = (maxHeightInDp * density).toInt() + } + + open fun disableMaxHeight() { + maxHeightInPixel = DisableMaxHeight + } + + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + if (maxHeightInPixel >= 0) { + val adjustedHeightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeightInPixel, MeasureSpec.AT_MOST) + + super.onMeasure(widthMeasureSpec, adjustedHeightMeasureSpec) + } + else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + } + } + +} \ No newline at end of file