본문 바로가기

Android

[Android] FlexboxLayout 초과된 줄 숨김 처리 Extension

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)
    }
}