編輯:關於Android編程
1.利用SimpleAdapter適配器實現。
這裡以每一個網格中添加一張圖片和相應的文字說明為例:
main.xml
因為除了添加圖片之外,還相應的添加說明性的文字,所以這裡需要為每網格設置一個布局item.xml
public class MainActivity extends Activity {
private int []imageId = new int[]{R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04,
R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09,
R.drawable.img10, R.drawable.img11, R.drawable.img12};
private String[] title = new String[]{"花開富貴", "海天一色", "日出", "天路", "一枝獨秀", "雲", "獨占鳌頭",
"蒲公英花", "花團錦簇", "爭奇斗艷", "和諧", "林間小路"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridView = (GridView)findViewById(R.id.gridView);
List
2.利用BaseAdapter實現添加圖片:<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+1eLA787Sw8e31sG91tbA4NDNvfjQ0L2yveKjujwvcD4KPHA+QDGjusjnufvWu8rHyea8sMztvNPNvM/xo6zDu9PQz+DTprXEzsTX1su1w/ejrNXi0fm1xLuwQmFzZUFkYXB0ZXK1xMq1z9a3vcq9vs2xyL3PvPK1paGjPC9wPgo8cD7V4sDvPC9wPgo8cD5tYWluLnhtbDwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">
此時不再需要item.xml. MainActivity.java中的代碼: BaseAdapter需要重寫getView()(最重要的)、getItem()、getItemId()、getCount()這四個方法。 還有就是convertView是一個緩存View。 通過緩存convertView,這種利用緩存contentView的方式可以判斷如果緩存中不存在View才創建View,如果已經存在可以利用緩存中的View,提升了性能
public class MainActivity extends Activity {
private int []imageId = new int[]{R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04,
R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09,
R.drawable.img10, R.drawable.img11, R.drawable.img12, };
//private String[] title = new String[]{"花開富貴", "海天一色", "日出", "天路", "一枝獨秀", "雲", "獨占鳌頭",
//"蒲公英花", "花團錦簇", "爭奇斗艷", "和諧", "林間小路"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gridView = (GridView)findViewById(R.id.gridView);
BaseAdapter adapter = new BaseAdapter()
{
@Override
public int getCount() {
// TODO 自動生成的方法存根
return imageId.length;
}
@Override
public Object getItem(int position) {
// TODO 自動生成的方法存根
return position;
}
@Override
public long getItemId(int position) {
// TODO 自動生成的方法存根
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO 自動生成的方法存根
ImageView imageView;
if(convertView == null)
{
imageView = new ImageView(MainActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
else
imageView = (ImageView)convertView;
imageView.setImageResource(imageId[position]);
return imageView;
}
};
gridView.setAdapter(adapter);
}
3.利用BaseAdapter實現添加圖片與文字說明。
這裡不僅要添加圖片還要添加相應的文字說明,相對上面的方法2比較復雜。但這確是BaseAdpter的最經典的用法。這裡涉及到效率問題,因而又有三種實現方式。
1.實現最簡單,但效率最低。
這種方式沒有采用convertView緩存機制。
其中LayoutInflater作用是將布局文件實例化為View。
main.xml與item.xml不變。
MainActivity.java中的代碼如下:
public class MainActivity extends Activity {
private int []imageId = new int[]{R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04,
R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09,
R.drawable.img10, R.drawable.img11, R.drawable.img12, };
private String[] title = new String[]{"花開富貴", "海天一色", "日出", "天路", "一枝獨秀", "雲", "獨占鳌頭",
"蒲公英花", "花團錦簇", "爭奇斗艷", "和諧", "林間小路"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final LayoutInflater mInflater = LayoutInflater.from(this);
GridView gridView = (GridView)findViewById(R.id.gridView);
BaseAdapter adapter = new BaseAdapter()
{
@Override
public int getCount() {
// TODO 自動生成的方法存根
return imageId.length;
}
@Override
public Object getItem(int position) {
// TODO 自動生成的方法存根
return position;
}
@Override
public long getItemId(int position) {
// TODO 自動生成的方法存根
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO 自動生成的方法存根
View view = mInflater.inflate(R.layout.item, null);
ImageView imageView = (ImageView)view.findViewById(R.id.imageView);
TextView textView = (TextView)view.findViewById(R.id.textView);
imageView.setImageResource(imageId[position]);
textView.setText(title[position]);
return view;
}
};
gridView.setAdapter(adapter);
}除了getView()不同之外,其他和方法1完全相同。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO 自動生成的方法存根
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.item, null);
}
ImageView imageView = (ImageView)convertView.findViewById(R.id.imageView);
TextView textView = (TextView)convertView.findViewById(R.id.textView);
imageView.setImageResource(imageId[position]);
textView.setText(title[position]);
return convertView;
}
}; class ViewHolder
{
private ImageView imageView;
private TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO 自動生成的方法存根
ViewHolder holder;
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.imageView = (ImageView)convertView.findViewById(R.id.imageView);
holder.textView = (TextView)convertView.findViewById(R.id.textView);
convertView.setTag(holder);
}
holder = (ViewHolder)convertView.getTag();
holder.imageView.setImageResource(imageId[position]);
holder.textView.setText(title[position]);
return convertView;
}
事件攔截機制分析
當Android系統捕獲到用戶的各種輸入事件後,如何准確地傳遞給真正需要這個事件的控件呢?Android給我們提供了一整套完善的事件傳遞、處理機制,來幫助開發者完成准確的
APK反編譯
學習和開發Android應用有一段時間了,今天寫一篇博客總結一下Android的apk文件反編譯。我們知道,Android應用開發完成之後,我們最終都會將應用打包成一個a
Android新手入門2016(10)--GridView
GridView跟ListView一樣是多控件布局。實現九宮圖是最方便的。還是先看看圖,沒圖說個雞雞是不是如上圖,是一種應用方式,在每個格子裡面,放入應用圖標,和顯示應用
如何節約Android設備的流量使用
Android開放的平台,獲得高度自由度,用戶也要承受系統當中一些潛在的問題,比如後台流量的消耗。那麼怎樣才能有效控制Android的流量使用呢?下面這5個