總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年1月9日 星期一

色碼表 ~ GridView與Adapter的結合








本範例以BackgroundAdapter.java extends BaseAdapter來改變GridView的背景圖, 並以一個覆蓋全畫面的ImageView增添OnClickListener事件, 讓user可以切換色系的名稱與編碼.

另外為了讓畫面保持在橫向狀態, 必須在Manifest.xml的Activity標籤中加入android:screenOrientation="landscape"的屬性






GridViewActivity.java

package com.tsots.GridView_Adapter_Color;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.ImageView;

public class GridViewActivity extends Activity 
{
 GridView gridview;
 ImageView imageview;
 String[] items;
 int temp = 0;
 BackgroundAdapter mygridviewadapter;
 int[] color = {
     R.color.darkred,    R.color.crimson,   R.color.red,     R.color.firebrick, 
     R.color.purple,    R.color.blueviolet, R.color.orchid,    R.color.pink,
     R.color.mediumvioletred, R.color.deeppink,   R.color.magenta,    R.color.lightcoral,  
     R.color.darkgreen,    R.color.green,   R.color.limegreen,   R.color.lightgreen,
     R.color.lime,     R.color.lawngreen,  R.color.greenyellow, R.color.paleolivine,      
     R.color.darkblue,    R.color.blue,    R.color.paleblue,    R.color.lightblue, 
     R.color.darkaqua,    R.color.aqua,    R.color.paleaqua,    R.color.lightaqua,      
     R.color.black,     R.color.gray,    R.color.silver,    R.color.white,
     R.color.darkorange,   R.color.orange,   R.color.paleorange,  R.color.lightorange, 
     R.color.gold,     R.color.yellow,   R.color.paleyellow,  R.color.lightyellow           
      };
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gridview = (GridView) findViewById (R.id.gridview);
        imageview = (ImageView) findViewById (R.id.imageview);
        items = getResources().getStringArray(R.array.colorname_array);
        imageview.setOnClickListener(new View.OnClickListener() 
        {   
   public void onClick(View v) 
   {    
    if (temp == 0)
          {
     items = getResources().getStringArray(R.array.colorcode_array);            
           temp = 1;
          }
          else
          {
     items = getResources().getStringArray(R.array.colorname_array); 
           temp = 0;
          }
    mygridviewadapter = new BackgroundAdapter(GridViewActivity.this, items, color);
             gridview.setAdapter(mygridviewadapter);
   }
  });      
        mygridviewadapter = new BackgroundAdapter(GridViewActivity.this, items, color);
        gridview.setAdapter(mygridviewadapter);
    }
}



在這個類別中, 用LayoutInflater讀入自定的layout(只放一個TextView),便可以陣列各別setText與setBackgroundResource

BackgroundAdapter.java

package com.tsots.GridView_Adapter_Color;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class BackgroundAdapter extends BaseAdapter 
{ 
 private Context _con;
 private String[] _items;
 private int[] _icons;

 public BackgroundAdapter(Context con,String[] items,int[] icons) 
 {
  _con=con;
  _items=items;
  _icons=icons;
 }

 public int getCount()
 {
  return _items.length;
 }

 public Object getItem(int arg0)
 {
  return _items[arg0];
 }

 public long getItemId(int position)
 {
  return position;
 }

 public View getView(int position, View convertView, ViewGroup parent)
 {
  LayoutInflater factory = LayoutInflater.from(_con);
  View v = (View) factory.inflate(R.layout.grid, null);
  TextView tv = (TextView) v.findViewById(R.id.text);
  tv.setBackgroundResource(_icons[position]);
  tv.setText(_items[position]);
  return v;
 } 
}

5 則留言:

  1. 您好~ 想請問 colorname_array 這個部分該怎麼使用~ 編譯這部分出錯~

    回覆刪除
  2. Hi~
    請問錯誤訊息?
    我猜測你可能沒有建立colors.xml (內含各種顏色的定義)
    以及strings.xml中會定義colorname_array(定義字串陣列)喔!

    回覆刪除
  3. 恩 ~查看之下是這個問題~~
    在請問一下~ 表單載入時著色 是tv.setBackgroundResource(_icons[position]);作用的嗎~
    如果我要設定成我要的顏色~ 是對 colorname_array(定義字串陣列) 這邊下手嗎~

    回覆刪除
  4. 如果要設定你要的顏色, 是建立在新增的colors.xml中喔.
    而 colorname_array是定義文字(說明這是什麼色、那是什麼色)

    回覆刪除