FlexboxLayout가 몇 줄을 넘어가는 경우 더보기 / 숨김 기능을 구현하는 과정에서 만든 Extension입니다.
import androidx.core.view.children
import androidx.core.view.isVisible
import com.google.android.flexbox.FlexboxLayout
val FlexboxLayout.lineCount: Int
get() = flexLines.size
fun FlexboxLayout.hideOverLines(criteria: Int) {
if (lineCount > criteria) {
for (i in criteria until lineCount) {
val flexLine = flexLines[i]
for (j in 0 until flexLine.itemCount)
getFlexItemAt(flexLine.firstIndex + j).isVisible = false
}
}
}
fun FlexboxLayout.showAllLines() {
children.forEach { it.isVisible = true }
}
사용 예시
for(item in items) {
binding.flexBox.addView(ItemView(context).apply { setItem(item) })
}
binding.flexBox.post {
if (binding.flexBox.lineCount > 3) {
binding.flexBox.hideOverLines(criteria = 3)
binding.btnMore.isVisible = true
} else {
binding.btnMore.isVisible = false
}
}
binding.btnMore.setOnClickListener {
if (binding.fleBox.lineCount > 3) {
binding.flexBox.hideOverLines(criteria = 3)
binding.btnMore.text = getString(R.string.common_see_more)
} else {
binding.flexBox.showAllLines()
binding.btnMore.text = getString(R.string.common_close)
}
}'Android' 카테고리의 다른 글
| [Android] Lifecycle-aware BroadcastReceiver 구현하기 (0) | 2025.05.19 |
|---|---|
| [Android] View에서 by viewModels() 사용하기 (0) | 2025.04.07 |
| [Android] Jetpack Compose Radar Chart (1) | 2024.10.16 |
| [Android] Compose Scrollable Column에서 처음 보여지는 타이밍 캐치하기 (0) | 2024.07.05 |
| [Android] Fragment.rootFragment extension property (1) | 2023.11.20 |