본문 바로가기
코드리뷰/코틀린 리뷰

안드로이드앱 동적 버튼 만들기 (코틀린)

by 디마드 2020. 12. 7.

QR/바코드 스캐너 앱을 개발하다가 동적 버튼이 필요하여 정리를 해보았다. 스캔 결과가 도서나 상품이 나오면 쇼핑 사이트로 이동하고, URL이면 해당 사이트를 띄워줘는 버튼이 생성되어야 한다. 그 외의 경우는 검색 엔진을 호출하는 버튼이 필요하다. 

동적 버튼 생성 결과

[웹 사이트 URL 인 경우]

웹 사이트 URL을 보여주고, 바로가기 버튼과 검색엔진 바로가기 버튼을 보여준다. 

웹사이트면 바로가기와 검색버튼을 동적생성함

 

[웹 사이트 URL 인 경우]

상품이면 상품코드와 상품명을 크롤링해서 가져오고 쇼핑몰과 검색엔진 바로가기를 보여준다. 

상품이면 쇼핑몰바로가기와 검색버튼을 동적생성

코틀린 동적 버튼 생성 소스코드

동적 버튼 생성 시 width, height, background 등 다양한 속성 지정이 가능하고 이벤트 처리를 위한 콜백도 가능하다. 버튼이 생성되면 상위의 view에 추가한다. 

// 동적버튼 생성 호출
makeButton(100, 50, 3)

// 동적버튼 생성
    private fun makeButton(w: Int, h: Int, gb: Int) {
        val dynamicButton = Button(this).apply {
            width = getDIP(w)
            height =getDIP(h)
            background = getDrawable(R.drawable.rounded_corner5)
            // Layout Margin 추가
            val lp = LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            )
            lp.setMargins(20, 20, 20, 20);
            layoutParams = lp
            text = when(gb) {
                1 -> {
                    "Book"
                }
                2 -> {
                    "URL"
                }
                3 -> {
                    "Product"
                }
                else ->{
                    "Search"
                }
            }
            setOnClickListener {
                Log.d(TAG, "onCreate: dynamicButton clicked")
                when(gb) {
                    1 -> {
                        goShopping(1)
                    } //도서
                    2 -> {
                        goWebsite()
                    } // URL
                    3 -> {
                        goShopping(2)
                    } // 제품
                    else -> {
                        searchOnGoogle()
                    } // 기타
                }
            }
        }        
        // LinearView에 버튼 추가
        btnView2.addView(dynamicButton)
    }

 

반응형

댓글