- 浏览: 204277 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xyyx_nk:
在demo中没有下载的示例,能详细说一下怎么监听下载过程吗?比 ...
DhNet 网络http工具(带缓存功能哦) -dhroid文档 -
zhaoguowei998:
dhroid ioc模块对 加密混淆问题 -
zhaoguowei998:
你太牛了,佩服佩服,以后要多想你请教了
dhroid ioc模块对 加密混淆问题 -
白色蜻蜓:
转载下您的文章,已注明出处。
IOS开发之百度地图API应用 -
wenjiefeng:
你好,在andrioidpn-client客户端源码里,Not ...
Android 推送之原理与初触Androidpn(Android Push Notification)
本人推荐采用这种办法去做,而不是系统提供的TabHost和TabActivity,感觉它们使用起来不自由!
请参考:
http://blog.csdn.net/hellogv/archive/2010/12/06/6057174.aspx
很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的Activity的Window作为View添加到ActivityGroup所指定的容器(LinearLayout)中。
接下来贴出本例运行的效果图:
ImageAdapter是本实例的关键之一,它继承于BaseAdapter,并加入一些自定义的方法。ImageAdapter的源码如下:
- import android.content.Context;
- import android.graphics.drawable.ColorDrawable;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- /**
- *
- * @author GV
- *
- */
- public class ImageAdapter extends BaseAdapter {
- private Context mContext;
- private ImageView[] imgItems;
- private int selResId;
- public ImageAdapter(Context c,int[] picIds,int width,int height,int selResId) {
- mContext = c;
- this.selResId=selResId;
- imgItems=new ImageView[picIds.length];
- for(int i=0;i<picIds.length;i++)
- {
- imgItems[i] = new ImageView(mContext);
- imgItems[i].setLayoutParams(new GridView.LayoutParams(width, height));//设置ImageView宽高
- imgItems[i].setAdjustViewBounds(false);
- //imgItems[i].setScaleType(ImageView.ScaleType.CENTER_CROP);
- imgItems[i].setPadding(2, 2, 2, 2);
- imgItems[i].setImageResource(picIds[i]);
- }
- }
- public int getCount() {
- return imgItems.length;
- }
- public Object getItem(int position) {
- return position;
- }
- public long getItemId(int position) {
- return position;
- }
- /**
- * 设置选中的效果
- */
- public void SetFocus(int index)
- {
- for(int i=0;i<imgItems.length;i++)
- {
- if(i!=index)
- {
- imgItems[i].setBackgroundResource(0);//恢复未选中的样式
- }
- }
- imgItems[index].setBackgroundResource(selResId);//设置选中的样式
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView imageView;
- if (convertView == null) {
- imageView=imgItems[position];
- } else {
- imageView = (ImageView) convertView;
- }
- return imageView;
- }
- }
SetFocus(int)这个方法是个关键点,即实现选中的效果。例如有ABCD4个Item,其中C被选中了,那么除C以外的Item都被设置为未被选中的样式,而C则设置为选中的样式。
接下来就开始写主Activity,主Activity包含GridView控件,名为gvTopBar,有2点是需要注意一下的。
SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。
setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。
- import android.app.Activity;
- import android.app.ActivityGroup;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.graphics.Color;
- import android.graphics.drawable.ColorDrawable;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.Gravity;
- import android.view.View;
- import android.view.Window;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.AdapterView;
- import android.widget.GridView;
- import android.widget.LinearLayout;
- import android.widget.Toast;
- import android.widget.AdapterView.OnItemClickListener;
- /**
- *
- * @author GV
- *
- */
- public class ActivityGroupDemo extends ActivityGroup {
- private GridView gvTopBar;
- private ImageAdapter topImgAdapter;
- public LinearLayout container;// 装载sub Activity的容器
- /** 顶部按钮图片 **/
- int[] topbar_image_array = { R.drawable.topbar_home,
- R.drawable.topbar_user, R.drawable.topbar_shoppingcart,
- R.drawable.topbar_note };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- gvTopBar = (GridView) this.findViewById(R.id.gvTopBar);
- gvTopBar.setNumColumns(topbar_image_array.length);// 设置每行列数
- gvTopBar.setSelector(new ColorDrawable(Color.TRANSPARENT));// 选中的时候为透明色
- gvTopBar.setGravity(Gravity.CENTER);// 位置居中
- gvTopBar.setVerticalSpacing(0);// 垂直间隔
- int width = this.getWindowManager().getDefaultDisplay().getWidth()
- / topbar_image_array.length;
- topImgAdapter = new ImageAdapter(this, topbar_image_array, width, 48,
- R.drawable.topbar_itemselector);
- gvTopBar.setAdapter(topImgAdapter);// 设置菜单Adapter
- gvTopBar.setOnItemClickListener(new ItemClickEvent());// 项目点击事件
- container = (LinearLayout) findViewById(R.id.Container);
- SwitchActivity(0);//默认打开第0页
- }
- class ItemClickEvent implements OnItemClickListener {
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- SwitchActivity(arg2);
- }
- }
- /**
- * 根据ID打开指定的Activity
- * @param id GridView选中项的序号
- */
- void SwitchActivity(int id)
- {
- topImgAdapter.SetFocus(id);//选中项获得高亮
- container.removeAllViews();//必须先清除容器中所有的View
- Intent intent =null;
- if (id == 0 || id == 2) {
- intent = new Intent(ActivityGroupDemo.this, ActivityA.class);
- } else if (id == 1 || id == 3) {
- intent = new Intent(ActivityGroupDemo.this, ActivityB.class);
- }
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- //Activity 转为 View
- Window subActivity = getLocalActivityManager().startActivity(
- "subActivity", intent);
- //容器添加View
- container.addView(subActivity.getDecorView(),
- LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
- }
- }
主Activity的布局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">
- <RelativeLayout android:layout_height="fill_parent"
- android:layout_width="fill_parent">
- <GridView android:layout_height="wrap_content" android:id="@+id/gvTopBar"
- android:layout_alignParentTop="true" android:layout_width="fill_parent"
- android:fadingEdgeLength="5dip" android:fadingEdge="vertical">
- </GridView>
- <LinearLayout android:id="@+id/Container"
- android:layout_below="@+id/gvTopBar" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- </LinearLayout>
- </RelativeLayout>
- </LinearLayout>
发表评论
-
Dhdb 简化sqlite数据库操作--dhroid文档
2014-04-15 12:30 1351android数据库其实使用的不多,dhroid框架中的 ... -
dhroid ioc模块对 加密混淆问题
2014-04-14 12:52 968大家应该已经看过ioc ... -
NetJSONAdapter 网络化的adapter(高效) -dhroid文档
2014-04-04 12:15 895关于adapter 我想对于大家来说已经不陌生了,基本应用 ... -
DhNet 网络http工具(带缓存功能哦) -dhroid文档
2014-03-24 13:36 1477网络请求是大多数应用不可获取的一部分,曾经和一个其他公司的 ... -
eventbus 事件总线-dhroid文档
2014-03-23 11:47 1261你听过onClick 事件,onItemClick 事件, ... -
ioc基础(视图,资源,assert注入)-dhroid文档
2014-03-21 12:59 864上一节 Android 极速开发框架 dhroid来了 ... -
ioc高级(接口,对象注入)-dhroid文档
2014-03-21 13:04 1133前一章 ioc基础( ... -
IOC容器详解(想晋升的进来)---dhroid框架教教程(一)
2014-03-20 10:30 975控制反转(Inversion of Control,英文缩写 ... -
Android 极速开发框架 dhroid来了(提供demo)
2014-03-19 17:24 1370我们公司内部使用的商业级android开发框架dhr ... -
HttpClient的3种超时说明
2013-03-14 11:05 884/* 从连接池中取连接的超时时间 */ConnManag ... -
MeasureSpec介绍及使用详解
2013-01-24 21:21 750一个MeasureSpec封装了父 ... -
Android学习——TextView 设置中划线 下划线
2012-10-31 14:42 3458android:textAppearance ... -
ListView与其中的Button,EditText,RatingBar等widget的click事件
2012-10-26 14:48 854在<RelativeLayout>中 an ... -
在线词典API
2012-09-09 19:34 726QQ词典 http://dict.qq.com/dic ... -
关于android WebViewClient的方法解释
2012-09-09 17:12 7621、public boolean shouldOverride ... -
android Uri获取真实路径转换成File的方法
2012-08-23 12:40 3064data.getData()返回的 ... -
Java之WeakReference与SoftReference使用讲解
2012-08-22 09:46 688如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集 ... -
Android自定义捕获Application全局异常
2012-08-21 17:24 1188package qianlong.qlmobile ... -
android 缩放图片与内存溢出
2012-08-03 09:43 1208常用的Android版缩放图片代码: ContentRes ... -
获取手机设备方向
2012-08-03 09:33 1460@Override public void onS ...
相关推荐
总的来说,通过`ActivityGroup`和`GridView`的结合,我们可以创建一个具备Tab分页和滑动切换功能的界面。然而,由于`ActivityGroup`在新的Android版本中已被弃用,现在推荐使用`Fragment`和`ViewPager`来实现类似的...
很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,...
6. **顶部Tab实现**: 压缩包中的"ActivityGroup和GridView实现标签分页(顶部Tab)"可能是指在顶部添加一个水平滚动的Tab条,通常使用HorizontalScrollView或ViewPager实现,这种方式可以提供更丰富的交互体验。...
【Android入门:ActivityGroup+GridView实现Tab分页标签】在Android开发中,创建Tab分页标签界面是一个常见的需求,尤其在构建多模块、多页面的应用时。传统的做法可能使用TabHost和TabActivity,但实际应用中,更...
这个教程将带你了解如何使用`ActivityGroup`和`GridView`来实现Tab分页,从而达到高仿微信界面的效果。`ActivityGroup`是Android早期版本中用于在一个Activity内嵌套其他Activity的方式,而`GridView`则是一个可以...
实现`gridview+activityGroup`的Tab分页效果,主要步骤如下: 1. **创建主Activity**:这是TabHost的容器,负责添加和管理各个Tab。 2. **创建TabHost**:在主Activity中实例化TabHost,并设置其布局。 3. **配置...
在本文中,我们将深入探讨如何结合这两种组件来创建一个TAB分页的效果。 首先,`GridView`是Android中的一种布局管理器,它允许你以网格形式展示数据,通常用于显示多列的列表项。在这个场景中,`GridView`被用于...
在Android应用开发中,"基于GridView和ActivityGroup实现的TAB分页"是一个常见的设计模式,用于构建具有多个页面(Tab)且每个页面展示不同数据集的应用界面。这种设计能够提高用户体验,让用户通过简单的点击切换就...
本篇将详细讲解如何利用`GridView`和`ActivityGroup`实现一个Tab分页菜单。 首先,`GridView`是Android中的一个控件,它允许你展示一列或多列的数据项,通常用于创建网格视图。`GridView`可以自定义布局,每一项都...
我之前做分页都是用GridView和ActivityGroup实现的 因为觉得TabHost不好用 还有就是自己水平差的原因吧 如果帮的话 重写view任何问题都可以解决 呵呵 下面请看实现过程 其实很简单