- 浏览: 76437 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
wangkuichina:
此event坐标单位是什么呢?
android view的触摸事件坐标 -
coolismonster:
正好用得到 谢谢分享
android文件夹管理器 -
shim:
HashMap不是线程安全的,这么搞有风险
Gallery异步加载图片 -
Lifehopeness:
谢谢分享
android自定义带多选框的listview并避免出现自动选中另外选项 -
czbnlzd920706:
Acitivity中 44行 stopS ...
android音乐播放器拖放播放进度设计
转载:ActivityGroup 实现TabHost
原文地址:http://blog.csdn.net/hellogv/article/details/6057174
很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的Activity的Window作为View添加到ActivityGroup所指定的容器(LinearLayout)中。
效果图:
ImageAdapter是本实例的关键之一,它继承于BaseAdapter,并加入一些自定义的方法。ImageAdapter的源码如下:
SetFocus(int)这个方法是个关键点,即实现选中的效果。例如有ABCD4个Item,其中C被选中了,那么除C以外的Item都被设置为未被选中的样式,而C则设置为选中的样式。
接下来就开始写主Activity,主Activity包含GridView控件,有2点是需要注意一下的。
SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。
setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。
ActivityGroupActivity.java
main.xml
demo源码:
原文地址:http://blog.csdn.net/hellogv/article/details/6057174
很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的Activity的Window作为View添加到ActivityGroup所指定的容器(LinearLayout)中。
效果图:

ImageAdapter是本实例的关键之一,它继承于BaseAdapter,并加入一些自定义的方法。ImageAdapter的源码如下:
package org.hwq.activitygroup.main; import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context context; private ImageView[] img; ImageAdapter(Context context,int weight,int height,int[] img){ this.context = context; this.img = new ImageView[img.length]; for(int i=0;i<img.length;i++){ this.img[i] = new ImageView(context); this.img[i].setLayoutParams(new GridView.LayoutParams(weight,height)); this.img[i].setAdjustViewBounds(false); this.img[i].setPadding(2, 2, 2, 2); this.img[i].setImageResource(img[i]); } } public void focus(int id){ for(int i=0;i<img.length;i++){ if(i == id){ img[i].setBackgroundColor(Color.YELLOW); }else{ img[i].setBackgroundColor(Color.TRANSPARENT); } } } public int getCount() { return img.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageview; if(convertView == null){ imageview = img[position]; }else{ imageview = (ImageView) convertView; } return imageview; } }
SetFocus(int)这个方法是个关键点,即实现选中的效果。例如有ABCD4个Item,其中C被选中了,那么除C以外的Item都被设置为未被选中的样式,而C则设置为选中的样式。
接下来就开始写主Activity,主Activity包含GridView控件,有2点是需要注意一下的。
SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。
setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。
ActivityGroupActivity.java
package org.hwq.activitygroup.main; import android.app.ActivityGroup; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.widget.AdapterView; import android.widget.GridView; import android.widget.LinearLayout; public class ActivityGroupActivity extends ActivityGroup { private GridView gridview; private LinearLayout layout; private int[] img; private ImageAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); img = new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4}; gridview = (GridView) findViewById(R.id.gridView1); layout = (LinearLayout) findViewById(R.id.linearlayout); gridview.setNumColumns(img.length); gridview.setSelector(new ColorDrawable(Color.TRANSPARENT)); gridview.setGravity(Gravity.CENTER); gridview.setVerticalSpacing(0); int weight = getWindowManager().getDefaultDisplay().getWidth()/img.length; adapter = new ImageAdapter(this,weight,48,img); switchActivity(0); gridview.setAdapter(adapter); gridview.setOnItemClickListener(new GridviewItemListener()); } class GridviewItemListener implements GridView.OnItemClickListener{ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switchActivity(position); } } public void switchActivity(int id){ adapter.focus(id); layout.removeAllViews(); Intent intent = null; if(id == 0){ intent = new Intent(this,ActivityA.class); }else if(id == 1){ intent = new Intent(this,ActivityB.class); }else if(id == 2){ intent = new Intent(this,ActivityC.class); }else if(id == 3){ intent = new Intent(this,ActivityD.class); } intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Window group = getLocalActivityManager().startActivity("", intent); layout.addView(group.getDecorView(),LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView android:id="@+id/gridView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numColumns="3" > </GridView> <LinearLayout android:id="@+id/linearlayout" android:layout_width="fill_parent" android:layout_height="match_parent" > </LinearLayout> </LinearLayout>
demo源码:
发表评论
-
DrawLayout几个注意点
2014-03-08 22:55 1482package com.example.navigationd ... -
layout_weight解惑
2014-02-20 13:25 0http://www.chess-ix.com/blog/th ... -
LayoutInflater注意事项
2014-02-20 10:52 0http://www.doubleencore.com/201 ... -
混淆掉Log.i输出
2013-12-26 15:42 0混淆配置文件加入 -assumenosideeffects c ... -
android TextView字体大小对应
2013-11-30 16:36 755设备信息:小米1 density=1.5, width=480 ... -
PopupWindow使用注意3点
2013-10-18 19:32 540使用PopupWindow注意点: ...... View v ... -
android 数据库同步
2013-10-14 13:35 1341package org.jerry; import or ... -
android singleTask几个注意点
2013-07-06 11:42 880android官网地址:http://developer.an ... -
转:WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法
2013-05-02 00:59 1021文章原址:http://www.jcodecraeer.com ... -
Android onTouchEvent, onClick及onLongClick的调用机制
2013-04-28 02:21 0http://blog.csdn.net/ddna/artic ... -
Touch一些东西
2013-04-28 02:03 0package com.example.touchdemo; ... -
电话状态变化
2013-04-27 23:39 1850电话拨出,随后挂断 04- ... -
Toast重复利用
2013-04-26 00:10 1185package com.example.toastdemo; ... -
dp sp与px的相互转化
2013-04-23 01:19 0TextView.java /** * ... -
Android手机分辨率基础知识(DPI,DIP计算)
2013-04-22 22:57 0原文地址:http://blog.csdn.net/morui ... -
9.png NinePatchDrawable
2013-04-17 00:27 0地址: docs/tools/help/draw9patch. ... -
BaseAdapter
2013-04-16 09:43 0http://blog.csdn.net/pkxiuluo01 ... -
Android Intent的几种用法全面总结
2013-04-11 01:21 0Intent应该算是Android中特有的东西。你可以在Int ... -
Android中的Intent详细讲解
2013-04-11 01:18 0在一个Android应用中,主要是由四种组件组成的,这四种组件 ... -
PopupWindow
2013-04-26 00:11 1315PopupWindow,实质是使用WindowManager添 ...
相关推荐
TabHost限制较多,自己定制不容易使用。本例子继承于ActivityGroup实现与TabHost类似的效果。其中的还实现了按钮的触发状态切换效果。代码详细易懂!上传共同学习,有不好的请指出。。谢谢!
为了解决这些问题,开发者引入了ActivityGroup,它允许在一个TabHost内嵌套多个Activity,使得在同一层级的Activity间切换更为便捷。 ActivityGroup是Android提供的一个特殊类型的Activity,它允许我们在一个...
在Android开发中,TabHost和ActivityGroup是两个重要的组件,它们用于实现复杂的界面布局和交互。TabHost主要用于创建带有标签页的应用界面,而ActivityGroup则允许你在同一个父Activity下管理多个子Activity,使得...
1. 创建ActivityGroup:首先,你需要创建一个继承自ActivityGroup的自定义类,如`MyActivityGroup extends ActivityGroup`。 2. 添加子Activity:在子Activity启动时,使用`LocalActivityManager`的`startActivity()...
本示例是关于如何在Android中实现嵌套的TabHost,即两个层级的TabHost,类似于网页中的二级菜单栏,这种设计可以提供更丰富的用户交互体验。 首先,我们要理解TabHost的基本概念。TabHost是一个容器,它可以包含一...
1. 继承ActivityGroup:创建一个新的Activity类,继承自ActivityGroup。 2. 自定义LocalActivityManager:在ActivityGroup中,我们需要通过getLocalActivityManager()方法获取LocalActivityManager对象,用于管理...
在TabHost中,我们可以使用ActivityGroup来实现每个Tab下的不同页面。然而,从API 13开始,Android推荐使用`Fragment`和`FragmentTabHost`来替代`ActivityGroup`,因为`Fragment`提供了更好的回退栈管理、生命周期...
在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和界面管理。在本文中,我们将深入探讨如何使用TabHost内嵌ActivityGroup来创建复杂的用户界面,并通过源码分析理解其工作原理。 ...
ActivityGroup是Android早期版本(API Level 8及以下)中实现Tab功能的一种方式,它允许在一个单一的Activity中嵌套多个子Activity。在本文中,我们将深入探讨如何使用ActivityGroup来实现Tab功能,以及它的工作原理...
2. ActivityGroup: 在旧版的Android SDK中(API Level 13之前),ActivityGroup是一个内置的类,允许在一个Activity中嵌套其他Activity,实现类似页面栈的效果。在Tab分页的实现中,每个Tab下的内容可能由不同的...
在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...
其中也包括了TabActivity去实现的,TabActivity 里面每个选项卡里面会有个默认的界面,但是当你的应用这个模块里面不止是一个界面,并且第二个界面里面,还需要你去显示下面的选项卡,很多人都会用到ActivityGroup,...
1. **TabHost的配置**:TabHost需要通过TabSpec来定义每个标签,每个TabSpec对应一个Activity或布局。设置TabSpec时,需要指定标签的文本和对应的Intent,Intent用于启动与该标签关联的Activity或Fragment。 2. **...
- 虽然`TabHost`和`ActivityGroup`在旧版本的Android中是常见选择,但随着Android版本的更新,`Fragment`和`ViewPager`等组件已经成为更推荐的实现方式。`Fragment`可以更好地支持多屏幕适配,同时提供了更好的生命...
在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和管理。本资源“Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip”提供了一种实现复杂界面布局的方式,下面将...
在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的切换和管理,特别是构建具有标签页式界面的应用。本资源“Android TabHost内嵌ActivityGroup界面管理源码.rar”提供了一个实际的示例,...
在Android开发中,ActivityGroup是一个老概念,它属于早期Android版本(2.2及更低)中的TabHost实现的一部分,用于在一个Tab内管理多个Activity。尽管在Android 3.0(API级别11)之后,ActivityGroup被废弃,...
2. **ActivityGroup与ViewPager结合**:在早期的实现中,`ViewPager`可以嵌套`ActivityGroup`,每个`ActivityGroup`中包含一个子Activity,实现类似Fragment的效果。 3. **优势**: - 简单易用:对于熟悉Activity...