331일차 - Custom BottomNavgation (1)
2021. 12. 1. 02:44ㆍDiary/300~400
앞으로 개발할 때, 매 번 바텀 네비게이션을
새로 만들어주는데, 대부분 같은 모양이니
간편하게 쓰기 위해 만들고있다.
< BottomNavigationContainer >
package navigation
import android.content.Context
import android.content.res.Resources
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import androidx.core.view.children
import com.kwon.mywidgetcollection.R
class BottomNavigationContainer(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
private var nvTextStyles: Int = 0
private var nvItemSelector: Int = 0
private var viewList = mutableListOf<View>()
private val Int.dp: Int get() = (this * Resources.getSystem().displayMetrics.density + 0.5f).toInt()
var onItemClick: (action: String) -> Unit = { }
init {
context?.let { con ->
attrs?.let { attr ->
initAttrs(con, attr)
}
}
}
private fun child() {
for(v in children) {
viewList.add(v)
(v as BottomNavigationItem).layoutParams = LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1F)
v.setTextStyle(nvTextStyles)
v.setItemSelector(nvItemSelector)
v.setOnClickListener {
for(vList in viewList) { v.itemInit((vList as BottomNavigationItem)) }
if(v.isChecked) v.toggle() else v.toggle()
onItemClick?.invoke(v.action)
}
}
}
private fun initAttrs(context: Context, attrs: AttributeSet) {
orientation = HORIZONTAL
gravity = Gravity.CENTER
context.obtainStyledAttributes(attrs, R.styleable.BottomNavigationContainer)?.let { typedArray ->
setPadding(0, 8.dp, 0, 4.dp)
nvTextStyles = typedArray.getResourceId(R.styleable.BottomNavigationContainer_nv_text_styles, 0)
nvItemSelector = typedArray.getResourceId(R.styleable.BottomNavigationContainer_nv_item_selector, 0)
typedArray.recycle()
}
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
child()
}
}
'Diary > 300~400' 카테고리의 다른 글
333일차 - 프레그먼트 화면 전환 (0) | 2021.12.03 |
---|---|
332일차 - Custom BottomNavigaion (2) (0) | 2021.12.02 |
330일차 - 구글 클라우드 플랫폼에서 인보이스가 날라왔다 (0) | 2021.11.30 |
329일차 - IT 영단어 기획서 V1.0 (0) | 2021.11.29 |
328일차 - 휴식 (0) | 2021.11.22 |