mihon/app/src/main/java/eu/kanade/tachiyomi/widget/AutofitRecyclerView.kt

46 lines
1.3 KiB
Kotlin
Raw Normal View History

2016-03-08 01:22:56 +01:00
package eu.kanade.tachiyomi.widget
import android.content.Context
2020-01-08 01:20:08 +01:00
import android.util.AttributeSet
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
2020-01-08 01:20:08 +01:00
import kotlin.math.max
2016-03-08 01:22:56 +01:00
class AutofitRecyclerView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
2020-04-25 20:24:45 +02:00
RecyclerView(context, attrs) {
2016-03-08 01:22:56 +01:00
private val manager = GridLayoutManager(context, 1)
2016-03-08 01:22:56 +01:00
private var columnWidth = -1
var spanCount = 0
set(value) {
field = value
if (value > 0) {
manager.spanCount = value
}
}
val itemWidth: Int
get() = measuredWidth / manager.spanCount
init {
if (attrs != null) {
val attrsArray = intArrayOf(android.R.attr.columnWidth)
val array = context.obtainStyledAttributes(attrs, attrsArray)
columnWidth = array.getDimensionPixelSize(0, -1)
array.recycle()
}
layoutManager = manager
}
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
super.onMeasure(widthSpec, heightSpec)
if (spanCount == 0 && columnWidth > 0) {
2020-01-08 01:20:08 +01:00
val count = max(1, measuredWidth / columnWidth)
2016-07-31 14:07:12 +02:00
spanCount = count
2016-03-08 01:22:56 +01:00
}
}
}