Android(安卓)UI开发第十八篇――ActivityGroup实现tab功能
android.app包中含有一个ActivityGroup类,该类是Activity的容器,可以包含多个嵌套进来的Activitys,这篇文章就是借助ActivityGroup可以嵌套Activity的功能来实现Tab功能。tab这种UI在很多的移动应用中可以看到,包括android、iphone、window phone7等移动终端上都有这样的应用,Tab这种UI方式具有小视图大容量的特点。
首先,从SDK中doc文档中都可以获知,ActivityGroup类的父类是Activity(见下图),也就是说二者具有相同的接口和生命周期,同Activity一样,也有onCreate()、onPause()等函数可供我们重载。
ActivityGroup中有两个public方法(下图):ActivityGroup中可以调用getLocalActivityManage()方法获取LocalActityManage来管理Activity。
ActivityGroup实现的tab功能的效果图如下。
先看一下java代码:
- publicclassMainViewextendsActivityGroup{
- @SuppressWarnings("unused")
- privateLinearLayoutbodyView,headview;
- privateLinearLayoutone,two,three,four;
- privateintflag=0;//通过标记跳转不同的页面,显示不同的菜单项
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.view_main);
- initMainView();
- //显示标记页面
- showView(flag);
- one.setOnClickListener(newOnClickListener(){
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- flag=0;
- showView(flag);
- }
- });
- two.setOnClickListener(newOnClickListener(){
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- flag=1;
- showView(flag);
- }
- });
- three.setOnClickListener(newOnClickListener(){
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- flag=2;
- showView(flag);
- }
- });
- four.setOnClickListener(newOnClickListener(){
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- flag=3;
- showView(flag);
- }
- });
- }
- /*
- *初始化主界面
- */
- publicvoidinitMainView(){
- headview=(LinearLayout)findViewById(R.id.head);
- bodyView=(LinearLayout)findViewById(R.id.body);
- one=(LinearLayout)findViewById(R.id.one);
- two=(LinearLayout)findViewById(R.id.two);
- three=(LinearLayout)findViewById(R.id.three);
- four=(LinearLayout)findViewById(R.id.four);
- }
- //在主界面中显示其他界面
- publicvoidshowView(intflag){
- switch(flag){
- case0:
- bodyView.removeAllViews();
- Viewv=getLocalActivityManager().startActivity("one",
- newIntent(MainView.this,OneView.class)).getDecorView();
- one.setBackgroundResource(R.drawable.frame_button_background);
- two.setBackgroundResource(R.drawable.frame_button_nopressbg);
- three.setBackgroundResource(R.drawable.frame_button_nopressbg);
- four.setBackgroundResource(R.drawable.frame_button_nopressbg);
- bodyView.addView(v);
- break;
- case1:
- bodyView.removeAllViews();
- bodyView.addView(getLocalActivityManager().startActivity("two",
- newIntent(MainView.this,TwoView.class))
- .getDecorView());
- one.setBackgroundResource(R.drawable.frame_button_nopressbg);
- two.setBackgroundResource(R.drawable.frame_button_background);
- three.setBackgroundResource(R.drawable.frame_button_nopressbg);
- four.setBackgroundResource(R.drawable.frame_button_nopressbg);
- break;
- case2:
- bodyView.removeAllViews();
- bodyView.addView(getLocalActivityManager().startActivity(
- "three",newIntent(MainView.this,ThreeView.class))
- .getDecorView());
- one.setBackgroundResource(R.drawable.frame_button_nopressbg);
- two.setBackgroundResource(R.drawable.frame_button_nopressbg);
- three.setBackgroundResource(R.drawable.frame_button_background);
- four.setBackgroundResource(R.drawable.frame_button_nopressbg);
- break;
- case3:
- bodyView.removeAllViews();
- bodyView.addView(getLocalActivityManager().startActivity(
- "four",newIntent(MainView.this,FourView.class))
- .getDecorView());
- one.setBackgroundResource(R.drawable.frame_button_nopressbg);
- two.setBackgroundResource(R.drawable.frame_button_nopressbg);
- three.setBackgroundResource(R.drawable.frame_button_nopressbg);
- four.setBackgroundResource(R.drawable.frame_button_background);
- break;
- default:
- break;
- }
- }
- }
程序中重要的是如下的方法:
- bodyView.removeAllViews();
- bodyView.addView(getLocalActivityManager().startActivity("two",
- newIntent(MainView.this,TwoView.class))
- .getDecorView());
使用view的removeAllViews()方法清除不需要的view,使用addView(View v)方法添加需要的view。
getLocalActivityManager().startActivity("two",new Intent(MainView.this, TwoView.class))得到一个window对象,window对象调用
getDecorView()获取view。关于window的方法可以参考android.app.Window。
通过tab的效果图可以看到这个效果使用了上、中、下三种布局,layout就可以这样做了。实现layout就可以实现tab功能了。
/**。
* @author 张兴业
* 邮箱:xy-zhang@163.com
* qq:363302850
*/
更多相关文章
- Visual Studio 跨平台开发实战(5) - Xamarin Android(安卓)多页
- Adnroid——自定义控件(入门篇之自定义验证码)
- Android定位功能(一)
- Android(安卓)高德地图 Polyline 设置点击事件
- Android事件的分发、拦截和执行
- Android(安卓)图片异步下载及缓存--Multithreading For Performa
- Android(安卓)gallery实现选中放大的效果
- Android_Servcie_后台服务总结笔记
- 对Android(安卓)ListView的理解