뷰 바인딩(View Binding)
- 뷰 바인딩은 findViewById 기능을 대체
- 뷰 바인딩을 사용하기 위해선 시작 전에 셋팅을 미리 해둬야 함
* View Binding과 findViewById 차이
- NullSafe : 파인드뷰와 달리 참조되는 걸 자동으로 가져옴, 직접 ID를 치지 않아서 널 포인터 예외 발생 위험이 없음
- Type Safety : 타입도 선언하지 않아도 되어서 예외 발생 위험이 없음
* gradle(module : app) 셋팅 (android 내부에 작성)
buildFeatures{
viewBinding = true
}
* 뷰 바인딩을 사용하는 Activity 셋팅
class MainActivity : AppCompatActivity() {
//1번
private lateinit var binding : ActivityMainBinding
...
override fun onCreate(savedInstanceState: Bundle?) {
...
//2, 3번
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
//이건 작성되어있긴한데 아이디를 불러오는 형식으로 되어있음
setContentView(view)
}
}
어댑터 뷰(Adapter View)
- 어댑터 뷰는 여러 개의 항목을 다양한 형식으로 나열하고 선택 할 수 있는 기능을 제공
- 어댑터 뷰 종류로는 리스트 뷰와 그리드 뷰가 있음
- 어댑터 뷰들은 모두 setOnClickListener 사용이 가능함
* 어댑터 뷰의 구조
-> 어댑터는 데이터 원본을 받아오고, 어댑터 뷰는 어댑터로부터 받아오는 방식
어댑터 종류 : BaseAdapter, ArrayAdapter, CursorAdapter, SimpleAdapter가 존재
* 리스트 뷰(ListView) : 항목을 수직으로 나열시키는 방식
* 그리드 뷰(GridView) : 항목을 격자 형태로 나열시키는 방식
* 그리드 뷰 주요 속성
- android:columnWidth=“100dp” : 그리드 항목 하나의 폭을 100dp로 설정
- android:numColumns=“auto_fit”: 열의 폭과 화면 폭을 바탕으로 자동 계산
- android:verticalSpacing: 항목 간의 간격 설정
- android:stretchMode=“columnWidth”: 열 내부의 여백을 폭에 맞게 채움
(리스트, 그리드 뷰 둘이 코드 자체는 비슷)
- 그리드 뷰에서 텍스트가 아닌 이미지를 사용할 경우 클래스를 따로 만든 후 BaseAdapter를 상속받아서 작성함
* ImageAdapter 코드 내용
class ImageAdapter : BaseAdapter() {
override fun getCount(): Int {
return mThumbIds.size
}
override fun getItem(position: Int): Any {
return mThumbIds[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val imageView: ImageView
if (convertView == null) {
imageView = ImageView(parent!!.context)
//레이아웃의 크기 지정
imageView.layoutParams = AbsListView.LayoutParams(200, 200)
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
imageView.setPadding(8, 8, 8, 8)
} else {
imageView = convertView as ImageView
}
//mThumbIds에 저장된 사진 리소스를 가져옴
imageView.setImageResource(mThumbIds.get(position))
return imageView
}
private val mThumbIds = arrayOf<Int>(
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
)
}
'Android 앱개발 공부 > TIL(Today I Learned)' 카테고리의 다른 글
[Android] TIL 34일차 (0) | 2024.07.11 |
---|---|
[Android] TIL 33일차 (0) | 2024.07.10 |
[Android] TIL 32일차 (0) | 2024.07.09 |
[Android] TIL 31일차 (0) | 2024.07.08 |
[Android] TIL 30일차 (0) | 2024.07.05 |