어댑터뷰(Adapter View)
리스트뷰, 그리드뷰, 스피너, 갤러리 등은 항목 집합을 표시하는데 이들을 묶어서 어댑터뷰라고 한다.
1. 스피너(Spinner)
흔히 '콤보 박스(Combo Box)'라고 부르는 것이다.
먼저 values - arrays.xml 소스에
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="genre">
<item>문학</item>
<item>인문/역사</item>
<item>예술/종교</item>
<item>사회/과학</item>
<item>경제/경영</item>
<item>자기계발</item>
<item>여행/잡지</item>
<item>어린이</item>
<item>영화</item>
<item>여성</item>
<item>원서</item>
</string-array>
</resources>
위에처럼 추가해준다.
public class ExerciseExam extends AppCompatActivity {
ArrayAdapter<CharSequence> adspin;
boolean mInitSpinner;
public void onCreate(Bundle savedINstanceState){
super.onCreate(savedINstanceState);
setContentView(R.layout.activity_excercise_exam);
Spinner spin = (Spinner)findViewById(R.id.myspinner);
spin.setPrompt("장르를 고르셈!.");
adspin = ArrayAdapter.createFromResource(this, R.array.genre, android.R.layout.simple_spinner_item);
adspin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(adspin);
spin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
/*초기화 시의 선택 제외시 */
if (mInitSpinner ==false){
mInitSpinner = true;
return;
}
Toast.makeText(ExerciseExam.this, adspin.getItem(position) +
" 선택했음!.", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
2. 그리드 뷰(Grid View)
그리드뷰는 항목을 2차원의 표 형태로 출력하는 위젯이다.
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="match_parent" //
android:padding="2dip"
android:verticalSpacing="4dip" // verticalSpacing : 항목간 수직 간격android:horizontalSpacing="4dip" // horizontalSpacing : 항목간 수평 간격
android:numColumns="auto_fit" // numColumns : 열의 폭과 화면 폭을 자동으로 계산
android:columnWidth="72dip" // columnWidth : 항목 하나당 폭android:stretchMode="columnWidth" // strechMode : 열 내부 여백이 있을시 처리 방법
// columnWidth일시 폭에 맞게 가득 채운다.
android:gravity="center"
/>// 열(세로)의 개수를 지정하는 속성은 있지만
// 행(가로)의 개수를 지정하는 속성은 없다. 공급되는 데이터의 개수에 따라 행수가 자동으로 결정
public class GridViewTest extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridviewtest);
GridView grid = (GridView)findViewById(R.id.grid);
ImageAdapter Adapter = new ImageAdapter(this);
grid.setAdapter(Adapter);
grid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(GridViewTest.this, position + "번째 그림 선택",
Toast.LENGTH_SHORT).show();
}
});
}
}
class ImageAdapter extends BaseAdapter { // BaseAdapter로부터 파생private Context mContext;
int[] picture = {
R.drawable.ccdam,
R.drawable.soyang2,
R.drawable.ududong,
R.drawable.zipdarigol,
R.drawable.dongul
};
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() { // getCount : 개수를 100개로 리턴return 100;
}
public Object getItem(int position) { // 이미지 5개를 돌려가면서 출력return picture[position % 5];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(80, 60)); // 크기 80x60으로 설정
imageView.setAdjustViewBounds(false);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(picture[position % 5]);
return imageView;
}
}
3. 갤러리(Gallery)
갤러리는 중앙이 고정되어 있고 수평으로 스크롤되는 어댑터뷰이다.
위에 사진처럼 카카오톡에도 갤러리 형식으로 되어 있는 걸 확인할 수 있다.
현재는 수평스크롤뷰(Horizontal Scroll View)와 ViewPager 등의 더 좋은 위젯으로 대체되어 있다.
앞으로는 많이 사용되지 않는다고 한다.
public class GalleryTest extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallerytest);
@SuppressWarnings("deprecation")
Gallery gal = (Gallery) findViewById(R.id.gallery);
gal.setAdapter(new ImageAdapter2(this));
gal.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(GalleryTest.this, position +
"번째 그림 선택", Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
class ImageAdapter2 extends BaseAdapter {
private Context mContext;
private int[] mImageIds = {
R.drawable.ccdam,
R.drawable.soyang2,
R.drawable.ududong,
R.drawable.zipdarigol,
R.drawable.dongul,
R.drawable.lotteworld,
};
public ImageAdapter2(Context c) {
mContext = c;
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return mImageIds[position];
}
public long getItemId(int position) {
return position;
}
@SuppressWarnings("deprecation")
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView)convertView;
}
imageView.setImageResource(mImageIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(136, 88));
return imageView;
}
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] 날짜와 시간 (0) | 2016.08.04 |
---|---|
[안드로이드] 프로그래스바(Progress Bar) (0) | 2016.08.04 |
[안드로이드] 항목 뷰 (0) | 2016.08.02 |
[안드로이드] 리스트뷰(ListView) (3) | 2016.07.31 |
[안드로이드] 어댑터뷰(Adapter View) (0) | 2016.07.31 |