안드로이드 개발자의 창고
[42일차 Android] Code를 이용한 View 생성 본문
출처 : 안드로이드 앱스쿨 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()
}
}
}
}
결과
'Computer > Android' 카테고리의 다른 글
[43일차 Android] 파일 입출력 (0) | 2023.07.10 |
---|---|
[43일차 Android] Application Class (0) | 2023.07.06 |
[42일차 Android] XML을 이용한 View 객체 생성 (0) | 2023.07.06 |
[42일차 Android] DrawerLayout (0) | 2023.07.06 |
[41일차 Android] TabLayout(ViewPager2과 TabLayout 연동) (0) | 2023.07.04 |