[Android] addView로 Layout에 View 추가하기

2022. 11. 28. 12:08·Android/UI
반응형

addView는 지정한 Layout에 동적으로 View를 추가할 수 있는 메서드이다.

addView를 사용하여 화면 순서 편집과 같은 기능을 구현할 수 있다.

 

코드상으로 View를 만들고 addView를 통해 Layout에 추가할 수 있지만,

이번에는 xml에서 View를 등록하고 Layout에 추가하려 한다.

 

다만 xml에서 View를 먼저 등록하게 되면 Parent View에 종속되기 때문에

addView를 사용하기 전에 해당 View의  부모 ViewGroup에서 removeView를 사용해야 한다.

 

예제로 버튼을 클릭하면 각 버튼에 해당하는 TextView를 LinearLayout에 추가하려고 한다.


예제 코드

class MainActivity : AppCompatActivity() {
    private lateinit var mBinding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mBinding.root)

        mBinding.btn1.setOnClickListener {
            setAddView(mBinding.tv1)
        }

        mBinding.btn2.setOnClickListener {
            setAddView(mBinding.tv2)
        }

        mBinding.btn3.setOnClickListener {
            setAddView(mBinding.tv3)
        }
    }

    private fun setAddView(tv: TextView) {
        (tv.parent as ViewGroup).removeView(tv) // textView의 부모 뷰 그룹에서 textView 제거
        mBinding.llMain.addView(tv) // LinearLayout에 textView 추가
        tv.visibility = View.VISIBLE
    }
}

 

LinearLayout에 추가하려는 TextView는 xml에 visibility를 gone으로 하여 생성한 상태이다.

 

버튼을 클릭했을 때 setAddView 메서드에 TextView를 전달한다.

부모 ViewGroup으로부터 removeView를 통해 전달받은 TextView와의 관계를 없애준다.

해당 동작을 하지 않으면 addView가 실행될 때 TextView가 이미 부모 View가 있다고 앱이 종료된다.

 

추가하려는 LinearLayout에 addView를 통해 전달받은 TextView를 추가하고,

TextView의 visibility를 visible로 변경한다.


 

View를 추가할 때 마지막에 쌓이는 것이 싫다면 addView의 인자 값으로 position을 추가할 수 있다.

→ addView(View child, int index)

참고 자료

 

전체 코드

반응형

'Android > UI' 카테고리의 다른 글

[Android] DrawerLayout으로 Side Navigation 구현하기  (0) 2022.12.15
[Android] ConstraintSet으로 View의 제약조건 수정하기  (0) 2022.12.01
[Android] TextWatcher로 텍스트 변경될 때마다 이벤트 처리하기  (0) 2022.11.23
[Android] Expandable RecyclerView 구현하기  (0) 2022.11.22
[Android] BottomSheetDialog 사용하기  (0) 2022.11.21
'Android/UI' 카테고리의 다른 글
  • [Android] DrawerLayout으로 Side Navigation 구현하기
  • [Android] ConstraintSet으로 View의 제약조건 수정하기
  • [Android] TextWatcher로 텍스트 변경될 때마다 이벤트 처리하기
  • [Android] Expandable RecyclerView 구현하기
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (81)
      • Android (58)
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Firebase (2)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3)
        • 이슈 처리 (14)
      • Android Studio (5)
      • Git (3)
      • 작업 일지 (13)
  • 최근 글

  • 인기 글

  • 태그

    Navigation
    Paging3
    GIT
    MQTT
    Bluetooth
    github
    hilt
    해상도
    webview
    issue
    flow
    CameraX
    in-app update
    Android Studio
    kizitonwose
    Pagination
    ADB
    loading
    BLE
    CalendarView
    SharedPreferences
    compose
    TabLayout
    Kotlin
    firebase
    recyclerview
    Andoird
    Android
    paging
    Room
  • 링크

    • GitHub
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.4
O_Gyong
[Android] addView로 Layout에 View 추가하기
상단으로

티스토리툴바