[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)
  • 최근 글

  • 인기 글

  • 태그

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

    • GitHub
  • 블로그 메뉴

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

티스토리툴바