AdapterView
- ListView
- ExpandableListView
- GridView
- Spinner
- Gallery
뷰컨테이너
뷰그룹 하위 클래스 중 레이아웃을 제외한 것
- 스크롤뷰, 슬라이딩드로어, 뷰플리퍼 등
- 어댑터뷰: 그리드뷰, 리스트뷰, 스피너, 갤러리 등
XML을 이용한 리스트뷰 만들기
1. 리스트뷰에 나열할 내용을 미리 String 배열로 만든다
2. 리스트뷰 변수 생성 ➡️ XML의 〈ListView〉에 대응
3. ArrayAdapter〈String〉 형의 변수 선언 ➡️ 리스트뷰의 모양과 내용을 1번의 배열로 채움
4. 3번에서 생성한 ArrayAdapter를 2번의 리스트 변수에 적용
5. 리스트뷰의 항목을 클릭했을 대 동작하는 리스너 정의
simple_list_item_multiple_choice <!-- 체크박스 -->
simple_list_item_single_choice <!-- 라디오버튼 -->
그리드뷰는 사진이나 그림을 격자 모양으로 배치한다

MainActivity.java
package com.example.project11_1;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("그리드뷰 영화 포스터");
final GridView gv = (GridView) findViewById(R.id.gridView1);
MyGridAdapter gridAdapter = new MyGridAdapter(this);
gv.setAdapter(gridAdapter);
}
public class MyGridAdapter extends BaseAdapter {
Context context;
public MyGridAdapter(Context c) {
context = c;
}
// 그리드뷰에 보일 이미지의 개수를 반환하도록 수정한다
public int getCount() {
return posterId.length;
}
public Object getItem(int arg0) {
return null;
}
public long getItemId(int arg0) {
return 0;
}
// 명화 그림 파일의 아이디를 배열로 저장한다
Integer[] posterId = {
R.drawable.adelaide, R.drawable.cactus, R.drawable.miseryorlittlebeggar,
R.drawable.reading, R.drawable.returninghome, R.drawable.rosebouquet,
R.drawable.summertime, R.drawable.theecho
};
String[] posterName = {
"Adelaid", "Cactus", "Misery or litte beggar", "Reading",
"Returning Home", "Rose bouquet", "Summer time", "The echo"
};
// 그림을 각 그리드뷰의 칸마다 이미지뷰로 생성해서 보여주게 한다
// 그림 개수 만큼 반복
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(200, 300));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(5, 5, 5, 5);
imageView.setImageResource(posterId[i]);
final int pos = i;
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View dialogView = (View) View.inflate(MainActivity.this, R.layout.dialog, null);
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
ImageView ivPoster = (ImageView) dialogView.findViewById(R.id.ivPoster);
ivPoster.setImageResource(posterId[pos]);
dlg.setTitle(posterName[pos]);
dlg.setIcon(R.drawable.ic_launcher_background);
dlg.setView(dialogView);
dlg.setNegativeButton("닫기", null);
dlg.show();
}
});
return imageView;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:numColumns="4"/>
</LinearLayout>
dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 그리드뷰의 작은 사진을 클릭하면 큰 사진이 나오는 대화상자용 XML 파일 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/ivPoster"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>