자주 있는 일은 아니지만 간혹 동적으로 버튼 생성이 필요할 경우도 있다.
그런 경우는 아래 소스코드와 같이 구현하면 된다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
for(id in 0 until 10){
val normalBtn4 = Button(this).apply{
width = getDPI(200)
height = getDPI(200)
setOnClickListener {
btnAction(id)
}
}
// LinearLayout에 버튼 추가하기
bodyView.addView(normalBtn4)
}
}
fun btnAction(id: Int){
when(id){
in 0..3 -> {
Toast.makeText(this, "0~3번의 아이디를 가진 버튼입니다.", Toast.LENGTH_SHORT).show()
}
4 -> {
Toast.makeText(this, "${id}번의 아이디를 가진 버튼입니다.", Toast.LENGTH_SHORT).show()
}
}
}
// 버튼의 width 및 height는 픽셀 값을 요구하지만 dp값이 디자인 작업에
// 유리하기 때문에 내가 원하는 DP값을 받아서 PX로 변환하는 함수
fun getDPI(dp: Int): Int {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), resources.displayMetrics)
.toInt()
}
코드에 설명은 간략히 하자면 다음과 같다.
1. 최초 액티비티 생성 시 버튼을 생성한다.
2. XML에 작성된 LinearLayout에 버튼을 추가한다.
3. 1, 2번 작업을 10번 반복한다.
4. 작성된 버튼을 터치하면 btnAction의 id에 맞는 액션이 발생한다.
쓸 일이 자주 있는 건 아니지만 알아두면 유용할 듯하다.
안드로이드(ANDROID) - 리사이클러뷰(RecyclerView)를 통한 ListView 사용 방법(2) (0) | 2020.03.31 |
---|---|
안드로이드(ANDROID) - 리사이클러뷰(RecyclerView)를 통한 ListView 사용 방법(1) (0) | 2020.03.30 |
안드로이드(ANDROID) - PIP 모드란? (0) | 2020.03.26 |
안드로이드(ANDROID) - 버튼(Button) 클릭 이벤트 (0) | 2020.03.26 |
안드로이드(ANDROID) - 최근 실행 이력 삭제 감지 이벤트 (0) | 2020.03.25 |