推荐安卓开发神器(里面有各种UI特效和android代码库实例)
很多客户端软件和浏览器软件都喜欢用Tab分页标签来管理内容,除了可以用TabHost控件,还可以用ImageButton + ActivityGroup实现Tab分页标签。使用ImageButton + ActivityGroup实现Tab分页标签,主要是把一个Sub Activity(子Activity)的Window作为View添加到ActivityGroup所指定的容器中,本文使用LinearLayout作为容器装载Sub Activity。
接下来贴出本例运行的效果图:
以下是切换时Sub Activity的生存周期的状态变化:
从subActivity1切换到subActivity2的时候,会彻底释放subActivity1的资源。
主Activity的main.xml的源码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:layout_width="fill_parent"> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ibtnTab1" android:background="@drawable/png1298"></ImageButton> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ibtnTab2" android:background="@drawable/png1292"></ImageButton> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout02" android:layout_width="fill_parent" android:layout_height="fill_parent"></LinearLayout> </LinearLayout>
Sub Activity的XML源码(listview.xml)如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/MyListView" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> </LinearLayout>
testActivityGroup.java源码如下:
package com.testActivityGroup; import android.app.ActivityGroup; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; public class testActivityGroup extends ActivityGroup { /** Called when the activity is first created. */ LinearLayout container;//装载sub Activity的容器 ImageButton ibtnTab1,ibtnTab2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); container = (LinearLayout) findViewById(R.id.LinearLayout02); ibtnTab1=(ImageButton)this.findViewById(R.id.ibtnTab1); ibtnTab1.setOnClickListener(new ClickEvent()); ibtnTab2=(ImageButton)this.findViewById(R.id.ibtnTab2); ibtnTab2.setOnClickListener(new ClickEvent()); } class ClickEvent implements View.OnClickListener{ @Override public void onClick(View v) { container.removeAllViews(); Intent intent=new Intent(testActivityGroup.this, subActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); String[] str=new String[12]; if(v==ibtnTab1) { for(int i=0;i<str.length;i++) str[i]="单选"+String.valueOf(i); intent.putExtra("Name", "subActivity1"); intent.putExtra("Strings", str); intent.putExtra("ChoiceMode", ListView.CHOICE_MODE_SINGLE);//通过参数设置列表式样 } else if(v==ibtnTab2) { for(int i=0;i<str.length;i++) str[i]="复选"+String.valueOf(i); intent.putExtra("Name", "subActivity2"); intent.putExtra("Strings", str); intent.putExtra("ChoiceMode", ListView.CHOICE_MODE_MULTIPLE);//通过参数设置列表式样 } Window subActivity=getLocalActivityManager().startActivity("subActivity",intent); container.addView(subActivity.getDecorView()); } } }
subActivity.java源码如下:
package com.testActivityGroup; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; public class subActivity extends Activity { String name; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listview); // 读取列表内容 name = this.getIntent().getStringExtra("Name"); String[] str = this.getIntent().getStringArrayExtra("Strings"); int choiceMode = this.getIntent().getIntExtra("ChoiceMode", ListView.CHOICE_MODE_NONE); ListView listView = (ListView) findViewById(R.id.MyListView); // 设置列表的式样 int itemID = android.R.layout.simple_list_item_1; if (choiceMode == ListView.CHOICE_MODE_MULTIPLE)// 主Activity要求多选 itemID = android.R.layout.simple_list_item_multiple_choice; else if (choiceMode == ListView.CHOICE_MODE_SINGLE)// 主Activity要求单选 itemID = android.R.layout.simple_list_item_single_choice; ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, itemID, str); listView.setAdapter(arrayAdapter); listView.setChoiceMode(choiceMode); Log.e(name, "onCreate");// 显示当前状态,onCreate与onDestroy对应 } @Override public void onDestroy() { super.onDestroy(); Log.e(name, "onDestroy");// 显示当前状态,onCreate与onDestroy对应 } @Override public void onStart() { super.onStart(); Log.e(name, "onStart");// 显示当前状态,onStart与onStop对应 } @Override public void onStop() { super.onStop(); Log.e(name, "onStop");// 显示当前状态,onStart与onStop对应 } @Override public void onRestart() { super.onRestart(); Log.e(name, "onRestart"); } @Override public void onResume() { super.onResume(); Log.e(name, "onResume");// 显示当前状态,onPause与onResume对应 } @Override public void onPause() { super.onResume(); Log.e(name, "onPause");// 显示当前状态,onPause与onResume对应 } }
相关推荐
ActivityGroup 使用实现tab分页标签,保存Activity状态、使用子Activity的Menu
ActivityGroupTest ActivityGroup 实现Tab分页
使用GridView+ActivityGroup实现的tab分页效果
ActivityGroup + GridView 实现Tab分页标签
基于GridView和ActivityGroup实现的Tab分页
用ActivityGroup+GridView实现Tab分页标签,并且可以滑动切换页面
很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,...
GridView+ActivityGroup 实现Tab分页
在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在...
今天为大家介绍下使用GridView和ActivityGroup实现的分页,这里需要将Activity转换成Window,然后再换成成View添加到容器中,具体实现代码如下,感兴趣的朋友可以参考下哈
http://blog.csdn.net/lyl_studio/article/details/7830487 示例源码
RadioButton实现Tab分页样式,你可以自己添加ActivityGroup.
ActionBar实现分页菜单(ActivityGroup+一些TextView布局.(在这里我们自定实现动态滚动效果))
我之前做分页都是用GridView和ActivityGroup实现的 因为觉得TabHost不好用 还有就是自己水平差的原因吧 如果帮的话 重写view任何问题都可以解决 呵呵 下面请看实现过程 其实很简单
16.3 ActivityGroup 16.4 ViewStub 16.5 Bitmap内存溢出 16.5.1 图片预先缩放 16.5.2 普通的图片缩放方法 16.5.3 Dalvik虚拟机的堆内存分配 16.5.4 Bitmap对象及时释放 16.6 多分辨率适应 16.7 本章小结