Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[42일차 Android] Code를 이용한 View 생성 본문

Computer/Android

[42일차 Android] Code를 이용한 View 생성

Wise-99 2023. 7. 6. 19:30

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Code를 이용한 View 생성

  • View 객체를 생성할 때는 생성자에 Context 객체를 설정해줘야 한다.
  • Context는 어떠한 작업을 하기 위한 정보를 가지고 있는 객체를 통칭한다.
  • 안드로이드에서는 Activity가 Context를 상속받고 있기 때문에 this를 넣어주면 되고 그 외에는 Context를 구하는 다양한 메서드를 통해 설정한다.

 

LayoutParam

  • LayoutParam은 View가 배치될 때 필요한 공통 속성을 설정할 수 있는 객체이다.
  • 이를 통해 가로 세로 길이를 설정해 줘야 한다.

 

 

 

예제 코드

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="추가" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="문자열 가져오기" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="마지막 뷰 제거" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="모든 뷰 제거" />

    <LinearLayout
        android:id="@+id/mainContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"></LinearLayout>
</LinearLayout>

 

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding
    // 생성된 뷰들을 담을 리스트
    val viewList = mutableListOf<EditText>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run {
            // View 추가
            button.setOnClickListener {
                // View의 가로세로 길이
                val params = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )

                // EditText를 생성한다.
                val newEditText = EditText(this@MainActivity)

                // 설정
                newEditText.layoutParams = params
                newEditText.hint = "문자열을 입력해주세요."

                viewList.add(newEditText)

                // 생성한 뷰를 추가한다.
                activityMainBinding.mainContainer.addView(newEditText)
            }

            // View들의 문자열을 받아 textView에 추가
            button2.setOnClickListener {
                textView.text = ""
                for (v1 in viewList){
                    textView.append("${v1.text.toString()}\n")
                }
            }

            // View 제거
            button3.setOnClickListener {
                // 순서를 지정하여 제거
                // activityMainBinding.mainContainer.removeViewAt(viewList.size - 1)
                // viewList.removeLast()

                // View를 지정하여 제거
                val lastView = viewList.last()
                activityMainBinding.mainContainer.removeView(lastView)
                viewList.removeLast()
            }

            // 모든 View 제거
            button4.setOnClickListener {
                activityMainBinding.mainContainer.removeAllViews()
            }
        }
    }
}

 

 

 

결과