国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android入門之ActivityGroup+GridView實(shí)現(xiàn)Tab分頁(yè)標(biāo)簽的方法

2020-04-11 11:46:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在Android程序中很多客戶端軟件和瀏覽器軟件都喜歡用Tab分頁(yè)標(biāo)簽來(lái)搭建界面框架。讀者也許會(huì)馬上想到使用TabHost 與 TabActivity的組合,其實(shí)最常用的不是它們,而是由GridView與ActivityGroup的組合。每當(dāng)用戶在GridView選中一項(xiàng),ActivityGroup就把該項(xiàng)對(duì)應(yīng)的Activity的Window作為View添加到ActivityGroup所指定的容器(LinearLayout)中。

先來(lái)貼出本例運(yùn)行的效果圖如下:

ImageAdapter是本實(shí)例的關(guān)鍵之一,它繼承于BaseAdapter,并加入一些自定義的方法。ImageAdapter的源碼如下:

package com.ActivityGroupDemo;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;/** *  * @author GV * */public class ImageAdapter extends BaseAdapter { private Context mContext;  private ImageView[] imgItems; private int selResId;  public ImageAdapter(Context c,int[] picIds,int width,int height,int selResId) {     mContext = c;     this.selResId=selResId;    imgItems=new ImageView[picIds.length];    for(int i=0;i<picIds.length;i++)    {     imgItems[i] = new ImageView(mContext);      imgItems[i].setLayoutParams(new GridView.LayoutParams(width, height));//設(shè)置ImageView寬高      imgItems[i].setAdjustViewBounds(false);      //imgItems[i].setScaleType(ImageView.ScaleType.CENTER_CROP);      imgItems[i].setPadding(2, 2, 2, 2);      imgItems[i].setImageResource(picIds[i]);     }  }   public int getCount() {     return imgItems.length;   }    public Object getItem(int position) {     return position;   }    public long getItemId(int position) {     return position;   }    /**    * 設(shè)置選中的效果    */   public void SetFocus(int index)   {     for(int i=0;i<imgItems.length;i++)     {       if(i!=index)       {        imgItems[i].setBackgroundResource(0);//恢復(fù)未選中的樣式      }     }     imgItems[index].setBackgroundResource(selResId);//設(shè)置選中的樣式  }     public View getView(int position, View convertView, ViewGroup parent) {     ImageView imageView;     if (convertView == null) {      imageView=imgItems[position];    } else {       imageView = (ImageView) convertView;     }     return imageView;   } } 

其中SetFocus(int)這個(gè)方法是個(gè)關(guān)鍵點(diǎn),即實(shí)現(xiàn)選中的效果。例如有ABCD4個(gè)Item,其中C被選中了,那么除C以外的Item都被設(shè)置為未被選中的樣式,而C則設(shè)置為選中的樣式。

接下來(lái)就開始寫主Activity,主Activity包含GridView控件,名為gvTopBar,有2點(diǎn)是需要注意一下的。

1.SetNumColumns():必須要使用setNumColumns來(lái)設(shè)置列數(shù),因?yàn)檫@個(gè)GridView只有一行,即所有的Item都在同一行,Item數(shù)量即為列數(shù)。

2.setSelector(new ColorDrawable(Color.TRANSPARENT)):把系統(tǒng)默認(rèn)選中的背景色透明化,因?yàn)槲覀円呀?jīng)在BaseAdapter中加入了SetFocus()來(lái)改變選中的樣式。

package com.ActivityGroupDemo;import android.app.Activity;import android.app.ActivityGroup;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.Window;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.GridView;import android.widget.LinearLayout;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;/** *  * @author GV * */public class ActivityGroupDemo extends ActivityGroup { private GridView gvTopBar; private ImageAdapter topImgAdapter; public LinearLayout container;// 裝載sub Activity的容器 /** 頂部按鈕圖片 **/ int[] topbar_image_array = { R.drawable.topbar_home,  R.drawable.topbar_user, R.drawable.topbar_shoppingcart,  R.drawable.topbar_note }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gvTopBar = (GridView) this.findViewById(R.id.gvTopBar); gvTopBar.setNumColumns(topbar_image_array.length);// 設(shè)置每行列數(shù) gvTopBar.setSelector(new ColorDrawable(Color.TRANSPARENT));// 選中的時(shí)候?yàn)橥该魃?gvTopBar.setGravity(Gravity.CENTER);// 位置居中 gvTopBar.setVerticalSpacing(0);// 垂直間隔 int width = this.getWindowManager().getDefaultDisplay().getWidth()  / topbar_image_array.length; topImgAdapter = new ImageAdapter(this, topbar_image_array, width, 48,  R.drawable.topbar_itemselector); gvTopBar.setAdapter(topImgAdapter);// 設(shè)置菜單Adapter gvTopBar.setOnItemClickListener(new ItemClickEvent());// 項(xiàng)目點(diǎn)擊事件 container = (LinearLayout) findViewById(R.id.Container); SwitchActivity(0);//默認(rèn)打開第0頁(yè) } class ItemClickEvent implements OnItemClickListener { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  long arg3) {  SwitchActivity(arg2); } } /** * 根據(jù)ID打開指定的Activity * @param id GridView選中項(xiàng)的序號(hào) */ void SwitchActivity(int id) { topImgAdapter.SetFocus(id);//選中項(xiàng)獲得高亮 container.removeAllViews();//必須先清除容器中所有的View Intent intent =null; if (id == 0 || id == 2) {  intent = new Intent(ActivityGroupDemo.this, ActivityA.class); } else if (id == 1 || id == 3) {  intent = new Intent(ActivityGroupDemo.this, ActivityB.class); }  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //Activity 轉(zhuǎn)為 View Window subActivity = getLocalActivityManager().startActivity(  "subActivity", intent); //容器添加View container.addView(subActivity.getDecorView(),  LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); }}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 尉犁县| 彝良县| 黄浦区| 祁连县| 汤原县| 和平区| 长垣县| 万州区| 方山县| 紫金县| 舞阳县| 沁阳市| 庆安县| 邹平县| 池州市| 淄博市| 柳林县| 晋江市| 澄城县| 竹山县| 健康| 嘉峪关市| 台山市| 土默特右旗| 博野县| 丹寨县| 杨浦区| 景德镇市| 西安市| 曲周县| 北京市| 蓬溪县| 太康县| 佛冈县| 丹东市| 两当县| 阳曲县| 界首市| 安多县| 永善县| 锦州市|