[Android] GridView Android 2011. 12. 20. 18:11

이것은 2차원 표 형태로 출력하는 위젯이다.

그리드 뷰는 많이들 봐 왔을 것이다.

여기에는 문자열, 이미지 모두 가능하고 다수의 데이터 중 하나를 선택 받을 경우 적합하다.

xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    />

java

package imageview.test;

import android.app.Activity;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.*;
import android.content.*;

public class ImageViewActivity extends Activity{
 
     /** Called when the activity is first created. */
  @Override   
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
        
         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 index, long id){
           Toast.makeText(ImageViewActivity.this, index+"선택", Toast.LENGTH_SHORT).show();
          }
         });
     }
}

class ImageAdapter extends BaseAdapter{
 Context _context;
 int[] picture = {R.drawable.calendar,R.drawable.calendar,R.drawable.calendar};
 public ImageAdapter(Context context){
  this._context=context;
 }
 
 public int getCount(){
  return 100;
 }
 
 public Object getItem(int index){
  return picture[index%3];
 }
 
 public long getItemId(int index){
  return index;
 }
 
 public View getView(int index, View view, ViewGroup parent){
  ImageView imgview;
  if(view==null){
   imgview = new ImageView(_context);
   imgview.setLayoutParams(new GridView.LayoutParams(45,45));
   imgview.setAdjustViewBounds(false);
   imgview.setScaleType(ImageView.ScaleType.CENTER_CROP);
   imgview.setPadding(8,8,8,8);
  }
  else{
   imgview = (ImageView)view;
  }
  imgview.setImageResource(picture[index % 3]);
  return imgview;
 }
}

실행을 해 보면 100개의 공간에 이미지가 들어가 있는 것을 확인 할 수가 있다.