首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android进门第十五篇之ActivityGroup + GridView 实现Tab分页标签

2013-11-08 
Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签本文来自http://blog.csdn.net/hellogv/

Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

????? 很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的Activity的Window作为View添加到ActivityGroup所指定的容器(LinearLayout)中。

SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。?view plainprint?

  1. package?com.ActivityGroupDemo;????
  2. import?android.app.Activity;??import?android.app.ActivityGroup;??
  3. import?android.content.BroadcastReceiver;??import?android.content.Context;??
  4. import?android.content.Intent;??import?android.content.IntentFilter;??
  5. import?android.graphics.Color;??import?android.graphics.drawable.ColorDrawable;??
  6. import?android.os.Bundle;??import?android.util.Log;??
  7. import?android.view.Gravity;??import?android.view.View;??
  8. import?android.view.Window;??import?android.view.ViewGroup.LayoutParams;??
  9. import?android.widget.AdapterView;??import?android.widget.GridView;??
  10. import?android.widget.LinearLayout;??import?android.widget.Toast;??
  11. import?android.widget.AdapterView.OnItemClickListener;??/**?
  12. ?*???*?@author?GV?
  13. ?*??*/??
  14. public?class?ActivityGroupDemo?extends?ActivityGroup?{????
  15. ????private?GridView?gvTopBar;??????private?ImageAdapter?topImgAdapter;??
  16. ????public?LinearLayout?container;//?装载sub?Activity的容器????
  17. ????/**?顶部按钮图片?**/??????int[]?topbar_image_array?=?{?R.drawable.topbar_home,??
  18. ????????????R.drawable.topbar_user,?R.drawable.topbar_shoppingcart,??????????????R.drawable.topbar_note?};??
  19. ??????@Override??
  20. ????public?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??
  21. ????????setContentView(R.layout.main);??????????gvTopBar?=?(GridView)?this.findViewById(R.id.gvTopBar);??
  22. ????????gvTopBar.setNumColumns(topbar_image_array.length);//?设置每行列数??????????gvTopBar.setSelector(new?ColorDrawable(Color.TRANSPARENT));//?选中的时候为透明色??
  23. ????????gvTopBar.setGravity(Gravity.CENTER);//?位置居中??????????gvTopBar.setVerticalSpacing(0);//?垂直间隔??
  24. ????????int?width?=?this.getWindowManager().getDefaultDisplay().getWidth()??????????????????/?topbar_image_array.length;??
  25. ????????topImgAdapter?=?new?ImageAdapter(this,?topbar_image_array,?width,?48,??????????????????R.drawable.topbar_itemselector);??
  26. ????????gvTopBar.setAdapter(topImgAdapter);//?设置菜单Adapter??????????gvTopBar.setOnItemClickListener(new?ItemClickEvent());//?项目点击事件??
  27. ????????container?=?(LinearLayout)?findViewById(R.id.Container);??????????SwitchActivity(0);//默认打开第0页??
  28. ????}????
  29. ????class?ItemClickEvent?implements?OnItemClickListener?{????
  30. ????????public?void?onItemClick(AdapterView<?>?arg0,?View?arg1,?int?arg2,??????????????????long?arg3)?{??
  31. ????????????SwitchActivity(arg2);??????????}??
  32. ????}??????/**?
  33. ?????*?根据ID打开指定的Activity??????*?@param?id?GridView选中项的序号?
  34. ?????*/??????void?SwitchActivity(int?id)??
  35. ????{??????????topImgAdapter.SetFocus(id);//选中项获得高亮??
  36. ????????container.removeAllViews();//必须先清除容器中所有的View??????????Intent?intent?=null;??
  37. ????????if?(id?==?0?||?id?==?2)?{??????????????intent?=?new?Intent(ActivityGroupDemo.this,?ActivityA.class);??
  38. ????????}?else?if?(id?==?1?||?id?==?3)?{??????????????intent?=?new?Intent(ActivityGroupDemo.this,?ActivityB.class);??
  39. ????????}???????????intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);??
  40. ????????//Activity?转为?View??????????Window?subActivity?=?getLocalActivityManager().startActivity(??
  41. ????????????????"subActivity",?intent);??????????//容器添加View??
  42. ????????container.addView(subActivity.getDecorView(),??????????????????LayoutParams.FILL_PARENT,?LayoutParams.FILL_PARENT);??
  43. ????}????
  44. }??

主Activity的布局XML文件源码如下:

view plainprint?

  1. <?xml?version="1.0"?encoding="utf-8"?>??<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  2. ????android:orientation="vertical"?android:layout_width="fill_parent"??????android:layout_height="fill_parent">??
  3. ????<RelativeLayout?android:layout_height="fill_parent"??????????android:layout_width="fill_parent">??
  4. ????????<GridView?android:layout_height="wrap_content"?android:id="@+id/gvTopBar"??????????????android:layout_alignParentTop="true"?android:layout_width="fill_parent"??
  5. ????????????android:fadingEdgeLength="5dip"?android:fadingEdge="vertical">??????????</GridView>??
  6. ????????<LinearLayout?android:id="@+id/Container"??????????????android:layout_below="@+id/gvTopBar"?android:layout_width="fill_parent"??
  7. ????????????android:layout_height="fill_parent">??????????</LinearLayout>??
  8. ????</RelativeLayout>??</LinearLayout>?

热点排行