`

转载:ActivityGroup 实现TabHost

 
阅读更多
转载: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的源码如下:
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源码:
  • 大小: 7.7 KB
分享到:
评论

相关推荐

    ActivityGroup实现TabHost效果

    TabHost限制较多,自己定制不容易使用。本例子继承于ActivityGroup实现与TabHost类似的效果。其中的还实现了按钮的触发状态切换效果。代码详细易懂!上传共同学习,有不好的请指出。。谢谢!

    用ActivityGroup解决TabHost中多个Activity跳转问题

    为了解决这些问题,开发者引入了ActivityGroup,它允许在一个TabHost内嵌套多个Activity,使得在同一层级的Activity间切换更为便捷。 ActivityGroup是Android提供的一个特殊类型的Activity,它允许我们在一个...

    TabHost, ActivityGroup 的使用例子

    在Android开发中,TabHost和ActivityGroup是两个重要的组件,它们用于实现复杂的界面布局和交互。TabHost主要用于创建带有标签页的应用界面,而ActivityGroup则允许你在同一个父Activity下管理多个子Activity,使得...

    Android代码-TabHost内嵌ActivityGroup界面管理源码.zip

    1. 创建ActivityGroup:首先,你需要创建一个继承自ActivityGroup的自定义类,如`MyActivityGroup extends ActivityGroup`。 2. 添加子Activity:在子Activity启动时,使用`LocalActivityManager`的`startActivity()...

    Android 嵌套TabHost示例

    本示例是关于如何在Android中实现嵌套的TabHost,即两个层级的TabHost,类似于网页中的二级菜单栏,这种设计可以提供更丰富的用户交互体验。 首先,我们要理解TabHost的基本概念。TabHost是一个容器,它可以包含一...

    tabhost和ActivityGroup的组合使用

    1. 继承ActivityGroup:创建一个新的Activity类,继承自ActivityGroup。 2. 自定义LocalActivityManager:在ActivityGroup中,我们需要通过getLocalActivityManager()方法获取LocalActivityManager对象,用于管理...

    gridview+activityGroup实现tab分页

    在TabHost中,我们可以使用ActivityGroup来实现每个Tab下的不同页面。然而,从API 13开始,Android推荐使用`Fragment`和`FragmentTabHost`来替代`ActivityGroup`,因为`Fragment`提供了更好的回退栈管理、生命周期...

    Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.7z

    在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和界面管理。在本文中,我们将深入探讨如何使用TabHost内嵌ActivityGroup来创建复杂的用户界面,并通过源码分析理解其工作原理。 ...

    ActivityGroup实现tab功能

    ActivityGroup是Android早期版本(API Level 8及以下)中实现Tab功能的一种方式,它允许在一个单一的Activity中嵌套多个子Activity。在本文中,我们将深入探讨如何使用ActivityGroup来实现Tab功能,以及它的工作原理...

    基于GridView和ActivityGroup实现的TAB分页

    2. ActivityGroup: 在旧版的Android SDK中(API Level 13之前),ActivityGroup是一个内置的类,允许在一个Activity中嵌套其他Activity,实现类似页面栈的效果。在Tab分页的实现中,每个Tab下的内容可能由不同的...

    ActivityGroup实现Activit栈

    在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...

    Android TabHost内嵌ActivityGroup界面管理源码.zip

    其中也包括了TabActivity去实现的,TabActivity 里面每个选项卡里面会有个默认的界面,但是当你的应用这个模块里面不止是一个界面,并且第二个界面里面,还需要你去显示下面的选项卡,很多人都会用到ActivityGroup,...

    安卓Android源码——TabHost内嵌ActivityGroup界面管理源码.zip

    1. **TabHost的配置**:TabHost需要通过TabSpec来定义每个标签,每个TabSpec对应一个Activity或布局。设置TabSpec时,需要指定标签的文本和对应的Intent,Intent用于启动与该标签关联的Activity或Fragment。 2. **...

    主界面tabhost+activitygroup框架

    - 虽然`TabHost`和`ActivityGroup`在旧版本的Android中是常见选择,但随着Android版本的更新,`Fragment`和`ViewPager`等组件已经成为更推荐的实现方式。`Fragment`可以更好地支持多屏幕适配,同时提供了更好的生命...

    Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip

    在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和管理。本资源“Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip”提供了一种实现复杂界面布局的方式,下面将...

    Android TabHost内嵌ActivityGroup界面管理源码.rar

    在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的切换和管理,特别是构建具有标签页式界面的应用。本资源“Android TabHost内嵌ActivityGroup界面管理源码.rar”提供了一个实际的示例,...

    android activitygroup demo

    在Android开发中,ActivityGroup是一个老概念,它属于早期Android版本(2.2及更低)中的TabHost实现的一部分,用于在一个Tab内管理多个Activity。尽管在Android 3.0(API级别11)之后,ActivityGroup被废弃,...

    Fragment + ViewPager 和 ActivityGroup tab横向滑动实现对比

    2. **ActivityGroup与ViewPager结合**:在早期的实现中,`ViewPager`可以嵌套`ActivityGroup`,每个`ActivityGroup`中包含一个子Activity,实现类似Fragment的效果。 3. **优势**: - 简单易用:对于熟悉Activity...

Global site tag (gtag.js) - Google Analytics