- 요약 -
1. 어댑터뷰의 계층도는 다음과 같습니다.
java.lang.Object
android.view.View
android.widget.viewGroup
android.widget.AdapterView
android.widget.AbsListView
android.widget.GridView
android.widget.ListView
android.widget.ExpandableListView
android.widget.AbsSpinner
android.widget.Spinner
android.widget.Gallery
2. 리스트뷰를 만드는 형식은 다음과 같습니다.
- 리스트뷰에 나열할 내용을 미리 String 배열로 만들어 놓습니다.
- 리스트뷰 변수를 생성하고 XML의 <ListView>에 대응시킵니다.
- ArrayAdapter<String>형의 변수를 선언하고, 리스트뷰의 모양과 내용을 1번의 배열로 채웁니다.
- 3번에서 생성한 어레이어댑터를 2번의 리스트뷰 변수에 적용합니다.
- 리스트뷰의 항목을 클릭했을 때 동작하는 람다식을 정의합니다.
3. 리스트뷰의 모양은 기본적으로 simple_list_item_1을 사용합니다. simple_list_item_single_choice를 사용하면 라디오버튼이 되고, simple_list_item_multiple_choice를 사용하면 체크박스가 됩니다.
4. 리스트뷰의 항목을 동적으로 추가, 삭제하려면 ArrayList<T>를 정의한 후 add()와 removeAt()메소드를 사용합니다.
5. 그리드뷰는 사진이나 그림을 격자 모양으로 배치해줍니다. 버튼, 텍스트 등을 배치할 수도 있지만 주로 사진이나 그림을 배치합니다.
6. 갤러리는 사진이나 이미지를 배치하고 좌우로 스크롤하여 볼 수 있게 해줍니다.
7. 스피너는 PC의 드롭다운 박스와 비슷한 기능을 하므로 화면이 작은 스마트폰에서 여러 개 중 하나를 선택할 수 있도록 확장하는 용도로 쓰입니다.
- 연습문제 -
1. AdapterView 클래스의 하위 클래스 10개를 나열하시오.
< Direct Subclasses >
Class Name | Class Content |
AbsListView | 가상화 된 리스트 구현을 위한 기본 클래스 |
AbsSpinner | 스피너 위젯 추상 클래스 |
AdaterViewAnimator | 뷰 사이의 스위칭시 애니메이션 기본 클래스 |
< Indirect Subclasses >
Class Name | Class Content |
AdapterViewFlipper | ViewAnimator클래스 보다 간단한 클래스 |
Gallery | ViewPager와 HorizontalScrollView를 포함한 수평 스크롤링(API 16부터는 추천 x) |
GridView | 그리드 형식의 뷰 (차원 스크롤링) |
ListView | 리스트 형식의 뷰 (수직 스크롤링) |
Spinner | PC의 드롭박스 다운같은 기능 |
StackView |
2. 리스트뷰의 모양을 표현하는 클래스 상수에는 android.R.layout.simple_list_item_1 외에 무엇이 있는지 조사하시오.
Const Class | Class Content |
simple_list_item_2 | 리스트 형태의 다른 버전 |
simple_list_item_activated_1 | simple_list_item_1에서 체크 시 백그라운드 상태를 바꿀 수 있음. |
simple_list_item_activated_2 | simple_list_item_2에서 체크 시 백그라운드 상태를 바꿀 수 있음. |
simple_list_item_checked | 체크박스 형태의 리스트 |
simple_list_item_multiple_choice | 다중 체크가 가능한 체크박스 형태의 리스트 |
simple_list_item_single_choice | 라디오버튼 형태의 리스트 |
simple_selectable_list_item | 텍스트와 (싱글, 멀티)아이템 선택 가능한 리스트 |
3. [예제11-8]에서 BaseAdapter 클래스를 상속받을 때 완성되는 getCount(), getItem() 등의 추상 메소드는 어떤 인터페이스에 속하는가?
답 : From interface android.widget.Adapter
4. ( 1 )는 사진이나 이미지를 배치하고 좌우로 스크롤하여 볼 수 있게 해주며, ( 2 )는 PC의 드롭다운 박스와 비슷한 기능을 한다.
답 :
( 1 ) -> Gallery
( 2 ) -> Spinner
5. 10장에서 작성했던 [실습10-2] 명화 선호도 투표 앱의 첫 화면을 그리드뷰로 변경하여 프로젝트를 작성하시오.
[activity_main.xml]
[MainActivity.kt]
(★ MyGridAdapter 클래스변수를 그리드 뷰에 적용합니다.)
(★ 1. 이미지뷰 변수를 생성하여 해당 그리드 뷰 위치(position: p0 파라미터)에 맞게 이미지를 넣어줍니다. 그리고 이미지를 클릭하면 투표수를 증가시키고 해당 메시지를 토스트로 출력합니다)
(★ 2. 총 이미지 갯수(이미지 아이디 갯수와 동일)의 크기를 반환합니다.)
(★ 참고로 그리드 뷰에서 자주 쓰이는 추상메소드는 getCount와 getView입니다.)
6. [직접 풀어보기 11-3]을 개선하여 영화 포스트가 이미지뷰가 아닌 9장 [예제 9-6]의 myGraphicView에 출력되도록 프로젝트를 작성하시오. 그리고 컨텍스트 메뉴로 영화 포스터가 [그림9-3]처럼 기하학적 변환이 되게 하시오.
[main_activity.xml]
(★ MyGraphicView 클래스를 리니어레이아웃에 뷰를 추가하기 위해 xml파일에 작성합니다.)
[MainActivity.kt]
(★ 1. 전역변수로 회전, 확대 or 축소, 기울기 증가 or 감소, 스피너 선택된 이미지 인덱스 변수(posterNum), 각 포스터 별 ID 배열변수, MyGraphicView 클래스 변수를 선언합니다.)
(★ 2. 비어있는 리니어 레이아웃(pictureLayout)에 MyGraphicView(graphicview)로 뷰를 추가하고, 해당 레이아웃(pictureLayout)에 컨텍스트 메뉴를 추가합니다. 또한 스피너 아이템 선택 리스너에는 선택된 이미지 인텍스 변수(posterNum = p2)를 설정하여 onDraw메소드가 호출 될 때마다 인덱스(posterNum)에 해당하는 이미지를 보여주도록 합니다.)
(★ 3. 컨텍스트 메뉴를 추가하고 menu!!.add(...) 컨텍스트 아이템 선택 메소드를 메뉴 아이템 ID 별로 작성합니다. 컨텍스트 메뉴를 클릭 할 때마다 상단의 전역변수 값을 바꾸고 invalidate()메소드를 호출 할 때마다 onDraw()메소드가 호출되는데 이때 변화된 전역변수의 값이 이미지를 다르게(회전, 기울이기, 확대 등) 보여줍니다.)
(★ 4. MyGraphicView 화면에 보여질 이미지를 작성합니다.)
수고하셨습니다. 이상 마치겠습니다 :)
'책 요약하기 > 코틀린을 활용한 안드로이드 프로그래밍' 카테고리의 다른 글
#13. 멀티미디어와 구글 지도 2021-02-24 (0) | 2021.02.24 |
---|---|
#12. 데이터 저장과 관리 2021-02-21 (2) | 2021.02.21 |
#10. 액티비티와 인텐트 2021-02-17 (0) | 2021.02.17 |
#9. 그래픽과 이미지 2021-02-14 (0) | 2021.02.14 |
#8. 파일 처리 2021-02-09 (4) | 2021.02.09 |