2010年12月20日月曜日

Android GridView でアイコンと文字のレイアウト

# メール書こうかなぁと思ったんだけど、なんか解決したみたいなので、こっちに書くことにしたよ。



MyActivity.java
  1. package yanzm.example.gridviewsample;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.os.Bundle;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.ArrayAdapter;  
  10. import android.widget.GridView;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13.   
  14. public class MyActivity extends Activity {  
  15.   
  16.     public class BindData {  
  17.         int iconId;  
  18.         String title;  
  19.     
  20.         BindData(int id, String s) {  
  21.             this.iconId = id;  
  22.             this.title = s;  
  23.         }  
  24.     }  
  25.    
  26.     private BindData[] mDatas = {  
  27.         new BindData(android.R.drawable.ic_menu_camera, "Camera"),  
  28.         new BindData(android.R.drawable.ic_menu_add, "Add"),  
  29.         new BindData(android.R.drawable.ic_menu_agenda, "Agenda"),  
  30.         new BindData(android.R.drawable.ic_menu_call, "Call"),  
  31.         new BindData(android.R.drawable.ic_menu_crop, "Compass"),  
  32.         new BindData(android.R.drawable.ic_menu_camera, "Crop"),  
  33.     };  
  34.    
  35.     @Override  
  36.     public void onCreate(Bundle savedInstanceState) {  
  37.         super.onCreate(savedInstanceState);  
  38.         setContentView(R.layout.main);  
  39.     
  40.         GridView gridview = (GridView) findViewById(R.id.gridview);  
  41.         gridview.setAdapter(new MyAdapter(this, R.layout.item, mDatas));  
  42.     }  
  43.    
  44.     static class ViewHolder {  
  45.         TextView textView;  
  46.         ImageView imageView;  
  47.     }   
  48.   
  49.     public class MyAdapter extends ArrayAdapter<BindData> {  
  50.         private LayoutInflater inflater;  
  51.         private int layoutId;  
  52.   
  53.         public MyAdapter(Context context, int layoutId, BindData[] objects) {  
  54.             super(context, 0, objects);  
  55.             this.inflater = (LayoutInflater) context  
  56.                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  57.             this.layoutId = layoutId;  
  58.         }  
  59.   
  60.         @Override  
  61.         public View getView(int position, View convertView, ViewGroup parent) {  
  62.             ViewHolder holder;  
  63.   
  64.             if (convertView == null) {  
  65.                 convertView = inflater.inflate(layoutId, parent, false);  
  66.                 holder = new ViewHolder();  
  67.                 holder.textView = (TextView) convertView.findViewById(R.id.textview);  
  68.                 holder.imageView = (ImageView) convertView.findViewById(R.id.imageview);  
  69.                 convertView.setTag(holder);  
  70.             } else {  
  71.                 holder = (ViewHolder) convertView.getTag();  
  72.             }  
  73.             BindData data= getItem(position);  
  74.             holder.textView.setText(data.title);  
  75.             holder.imageView.setImageResource(data.iconId);  
  76.             return convertView;  
  77.         }  
  78.     }  
  79. }  


main.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <GridView xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:id="@+id/gridview"  
  4.     android:layout_width="fill_parent"   
  5.     android:layout_height="fill_parent"  
  6.     android:numColumns="2"  
  7.     android:columnWidth="85dip"  
  8.     android:verticalSpacing="8dip"  
  9.     android:stretchMode="columnWidth"  
  10.     android:gravity="center"  
  11.     />  


item.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:orientation="vertical"  
  4.     android:layout_width="wrap_content"  
  5.     android:layout_height="wrap_content"  
  6.     android:padding="5dip"  
  7.     android:gravity="center"  
  8.     >  
  9.     <ImageView  
  10.         android:id="@+id/imageview"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         />  
  14.     <TextView   
  15.         android:id="@+id/textview"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         />  
  19. </LinearLayout>  



 

1 件のコメント:

  1. i will try this.

    i cant fix my knowledge about your kanji, sorry. but thanks you type into latin. so far so thanks :D

    返信削除