View 객체 생성하기
- 코드를 통해 View 객체를 생성하여 layout에 추가할 수 있다.
- View 객체를 생성할 때는 생성자에 Context 객체를 설정해줘야 한다.
- Context는 어떠한 작업을 하기 위한 정보를 가지고 있는 객체를 통칭한다.
- 안드로이드에서는 Activity가 Context를 상속받고 있기 때문에 this를 넣어주면 되고 그 외에는 Context를 구하는 다양한 메서드를 통해 설정한다.
LayoutParam
- LayoutParam은 View가 배치될 때 필요한 공통 속성을 설정할 수 있는 객체이다.
- 이를 통해 가로 세로 길이를 설정해 줘야 한다.
즉, 코드를 통해 View 객체를 만들고 코드로 View를 배치할 수 있다.
1. 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>
2. MainActivity
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 {
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)
}
button2.setOnClickListener {
textView.text = ""
// 리스트에 들어 있는 뷰의 수 만큼 반복한다.
for(v1 in viewList){
textView.append("${v1.text.toString()}\n")
}
}
button3.setOnClickListener {
// removeViewAt : 순서를 지정하여 제거 (여기서는 마지막을 제거) - 이렇게 하는게 더 좋다
// activityMainBinding.mainContainer.removeViewAt(viewList.size - 1)
// viewList.removeLast()
// removeView : View를 지정하여 제거 (여기서는 마지막을 제거)
val lastView = viewList.last()
activityMainBinding.mainContainer.removeView(lastView)
viewList.removeLast()
}
button4.setOnClickListener {
// 모든 뷰를 제거한다.
activityMainBinding.mainContainer.removeAllViews()
viewList.clear()
}
}
}
}
[결과]
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님
'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글
[11주차 - 화] FileStream (0) | 2023.07.04 |
---|---|
[11주차 - 화] Application Class (0) | 2023.07.04 |
[11주차 - 월] XMLView (0) | 2023.07.03 |
[11주차 - 월] DrawerLayout (0) | 2023.07.03 |
[10주차 - 수] TabLayout (0) | 2023.07.02 |