ActivityGroup是Activity的子类,在Activity的基础上还扩充了一些东西,如可以让多个Activity程序在同一界面上运行且互不干扰。这种功能在menu比较多的地方使用起来会很方便,用途也很广泛。下面是自己整理的一些代码供大家学习使用。

1.一般来说菜单一般都包含图片,实现这种功能一般都会用到适配器,该适配器继承BaseAdapter,代码如下

package org.lxh.activity;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;public class MenuImageAdapter extends BaseAdapter{private Context context;//所有标签的图片显示private ImageView[] menuImg;//选中的ImageView索引private int selectedMenuImg;public MenuImageAdapter(Context context,int imgIds[],int width,int height,int selectedMenuImg){this.context=context;this.selectedMenuImg=selectedMenuImg;this.menuImg=new ImageView[imgIds.length];for(int x=0;x<imgIds.length;x++){//实例化ImageView对象this.menuImg[x]=new ImageView(this.context);//定义图片的布局参数this.menuImg[x].setLayoutParams(new GridView.LayoutParams(width,height));this.menuImg[x].setAdjustViewBounds(false);this.menuImg[x].setPadding(3, 3, 3, 3);this.menuImg[x].setImageResource(imgIds[x]);}}public int getCount() {// TODO Auto-generated method stubreturn this.menuImg.length;}public Object getItem(int position) {// TODO Auto-generated method stubreturn this.menuImg[position];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView imgView=null;if(imgView==null){imgView=this.menuImg[position];}else{imgView=(ImageView)convertView;}return imgView;}public void setFocus(int selid){for(int x=0;x<this.menuImg.length;x++){if(x!=selid){this.menuImg[x].setBackgroundResource(0);}}this.menuImg[selid].setBackgroundResource(this.selectedMenuImg);}
}

到这里第一个适配器就好了,下面为了把功能做好一些,顺便加个弹出菜单,该菜单包含标题和内容。此类弹出菜单也需要写适配器,分别是标题适配器,内容适配器。标题适配器比较简单,只需做一下点击的效果和标题内容的显示就OK,代码如下

package org.lxh.activity;import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;public class PopupMenuTitleAdapter extends BaseAdapter {private TextView menuTitle[] = null; // 文字显示组件private int fontColor;private int selectedColor;private int unSelectedColor;public PopupMenuTitleAdapter(Context context, int[] titleIds,int fontColor, int fontSize, int selectedColor, int unSelectedColor) {this.fontColor = fontColor;this.selectedColor = selectedColor;this.unSelectedColor = unSelectedColor;this.menuTitle = new TextView[titleIds.length];for (int x = 0; x < titleIds.length; x++) {this.menuTitle[x] = new TextView(context);this.menuTitle[x].setText(titleIds[x]);this.menuTitle[x].setTextSize(fontSize);this.menuTitle[x].setGravity(Gravity.CENTER);this.menuTitle[x].setPadding(10, 10, 10, 10);}}@Overridepublic int getCount() {return this.menuTitle.length;}@Overridepublic Object getItem(int position) {return this.menuTitle[position];}@Overridepublic long getItemId(int position) {return this.menuTitle[position].getId();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = null;if (convertView == null) {view = this.menuTitle[position];} else {view = convertView;}return view;}public void setFocus(int index) {for (int x = 0; x < this.menuTitle.length; x++) {if (x != index) {this.menuTitle[x].setBackgroundDrawable(new ColorDrawable(this.unSelectedColor));this.menuTitle[x].setTextColor(fontColor);}}this.menuTitle[index].setBackgroundColor(0x00);this.menuTitle[index].setTextColor(this.selectedColor);}
}

下面是弹出菜单的内容适配器,里面包含了多个Activity.

package org.lxh.activity;import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;public class PopupMenuBodyAdapter extends BaseAdapter {private ImageView[] menuImg = null ;public PopupMenuBodyAdapter(Context context, int [] picIds) {this.menuImg = new ImageView[picIds.length];for (int x = 0; x < this.menuImg.length; x++) {this.menuImg[x] = new ImageView(context) ;this.menuImg[x].setImageResource(picIds[x]) ;}}@Overridepublic int getCount() {return this.menuImg.length;}@Overridepublic Object getItem(int position) {return this.menuImg[position];}@Overridepublic long getItemId(int position) {return this.menuImg[position].getId();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = null ;if (convertView == null) {view = this.menuImg[position];} else {view = convertView;}return view;}}

2.之后便是标题和内容的顶层了,这一层就是PopupMenu了,这个弹出菜单就包含了标题和内容

package org.lxh.activity;import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;public class PopMenu extends PopupWindow {private GridView popTitle ; // 表示标题private GridView popBody ;   // 标题主体private PopupMenuTitleAdapter titleAdapter = null ;private LinearLayout layout = null ;public PopMenu(Context context, int titleIds[],int backgroundColor,OnItemClickListener titleCallback, OnItemClickListener bodyCallback) {super(context); // 还是需要创建弹出的组件this.titleAdapter = new PopupMenuTitleAdapter(context, titleIds,0xFF222222, 16, Color.LTGRAY, Color.WHITE);this.layout = new LinearLayout(context) ;this.layout.setOrientation(LinearLayout.VERTICAL) ;this.popTitle = new GridView(context);this.popTitle.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); this.popTitle.setNumColumns(titleIds.length) ;this.popTitle.setHorizontalSpacing(1) ;this.popTitle.setVerticalSpacing(1) ;this.popTitle.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); // 拉申列宽this.popTitle.setAdapter(this.titleAdapter) ;this.popTitle.setOnItemClickListener(titleCallback) ;this.popBody = new GridView(context) ;this.popBody.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));this.popBody.setNumColumns(5) ;this.popBody.setHorizontalSpacing(1) ;this.popBody.setVerticalSpacing(1) ;this.popBody.setPadding(10, 10, 10, 10) ;this.popBody.setGravity(Gravity.CENTER) ;this.popBody.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); // 拉申列宽this.popBody.setOnItemClickListener(bodyCallback) ;this.layout.addView(this.popTitle) ;this.layout.addView(this.popBody) ;super.setContentView(this.layout) ;super.setWidth(LayoutParams.FILL_PARENT) ;super.setHeight(LayoutParams.WRAP_CONTENT) ;super.setBackgroundDrawable(new ColorDrawable(backgroundColor)) ;super.setFocusable(true) ; // 允许获得焦点}public void setPopupMenuBodyAdapter(PopupMenuBodyAdapter adapter) {this.popBody.setAdapter(adapter) ;}public void setPopTitleSelected(int postion) {this.popTitle.setSelection(postion) ;this.titleAdapter.setFocus(postion) ;}public void setPopBodySelected(int position,int selectedColor) {   // 设置选中后的颜色int count = this.popBody.getChildCount() ;for (int x = 0; x < count; x++) {if (x != position) {ImageView img = (ImageView) this.popBody.getChildAt(x) ;img.setBackgroundColor(Color.TRANSPARENT) ;}}ImageView img = (ImageView) this.popBody.getChildAt(position) ;img.setBackgroundColor(selectedColor) ;}
}

这里呢顺便加了点击效果,点击后背景变为灰色

3.后面就是主要的activity了。此时我们需要显示一个菜单,之后给第四个菜单加弹出式菜单,并在弹出菜单切换程序

package org.lxh.activity;import android.app.ActivityGroup;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.Toast;public class PopMenuActivity extends ActivityGroup {private GridView gridviewToolbar; // 工具菜单栏private MenuImageAdapter menu = null; // 图片适配器private LinearLayout content = null; // 填充内容private int menu_img[] = new int[] { R.drawable.menu_main,R.drawable.menu_news, R.drawable.menu_sms, R.drawable.menu_more,R.drawable.menu_exit }; // 填充的图片的资源private int width = 0; // 求出平均的宽度private int height = 0; // 求出平均的高度,定位显示private Intent intent = null;private boolean isShow = false ;private int commonItemIds[] = new int[] { R.drawable.common_account,R.drawable.common_addmark, R.drawable.common_download,R.drawable.common_exit, R.drawable.common_fullscreen,R.drawable.common_history, R.drawable.common_night,R.drawable.common_refresh };private int setItemIds[] = new int[] { R.drawable.set_button,R.drawable.set_mode, R.drawable.set_nophoto,R.drawable.set_rotation, R.drawable.set_scroll,R.drawable.set_skin, R.drawable.set_system, R.drawable.set_time };private int totleItemids[] = new int[] { R.drawable.tool_back,R.drawable.tool_copy, R.drawable.tool_file, R.drawable.tool_help,R.drawable.tool_report, R.drawable.tool_report,R.drawable.tool_save, R.drawable.tool_share };private int titleIds[] = new int[] { R.string.popmenu_common,R.string.popmenu_set, R.string.popmenu_tool };private PopMenu popMenu = null ;private PopupMenuBodyAdapter commonAdapter = null ;private PopupMenuBodyAdapter setAdapter = null ;private PopupMenuBodyAdapter toolAdapter = null ;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消标题super.setContentView(R.layout.main);this.gridviewToolbar = (GridView) super.findViewById(R.id.gridviewbar);this.content = (LinearLayout) super.findViewById(R.id.content);// 定义工具栏的一些信息显示this.gridviewToolbar.setNumColumns(this.menu_img.length); // 求出可以保存的个数this.gridviewToolbar.setSelector(new ColorDrawable(Color.TRANSPARENT));this.gridviewToolbar.setGravity(Gravity.CENTER);this.gridviewToolbar.setVerticalSpacing(0);this.width = super.getWindowManager().getDefaultDisplay().getWidth()/ this.menu_img.length;this.height = super.getWindowManager().getDefaultDisplay().getHeight() / 8;this.menu = new MenuImageAdapter(this, this.menu_img, this.width,this.height, R.drawable.menu_selected);this.gridviewToolbar.setAdapter(this.menu);this.switchActivity(0); // 第一个被选中this.gridviewToolbar.setOnItemClickListener(new OnItemClickListenerImpl());this.popMenu = new PopMenu(this, this.titleIds, 0x55123456, new PopupTitleOnItemClickListenerCallback(),new PopupBodyOnItemClickListenerCallback());this.commonAdapter = new PopupMenuBodyAdapter(this, this.commonItemIds);this.setAdapter = new PopupMenuBodyAdapter(this, this.setItemIds);this.toolAdapter = new PopupMenuBodyAdapter(this, this.totleItemids);this.popMenu.setPopupMenuBodyAdapter(this.commonAdapter) ;this.popMenu.setPopTitleSelected(0) ;}private class OnItemClickListenerImpl implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {PopMenuActivity.this.switchActivity(position);}}private void switchActivity(int id) { // 切换选中的操作this.menu.setFocus(id); // 设置选中图片的背景this.content.removeAllViews(); // 删除所有的内容switch (id) {case 0:this.intent = new Intent(PopMenuActivity.this, MyActivity.class);break;case 1:this.intent = new Intent(PopMenuActivity.this, MyActivity.class);break;case 2:this.intent = new Intent(PopMenuActivity.this, MyActivity.class);break;case 3:this.showPopupMenu() ;break;case 4:this.exitDialog() ;return;}this.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);Window subActivity = super.getLocalActivityManager().startActivity("subActivity", this.intent);this.content.addView(subActivity.getDecorView(),LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);}private void exitDialog() {Dialog dialog = new AlertDialog.Builder(this).setIcon(R.drawable.pic_m).setTitle("程序退出? ").setMessage("您确定要退出本程序吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {PopMenuActivity.this.finish() ;}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {PopMenuActivity.this.switchActivity(0);}}).create();dialog.show();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK) {this.exitDialog() ;}return false ;}private void showPopupMenu() {if (this.isShow) { // 已经显示了this.popMenu.dismiss();this.isShow = false;} else {this.popMenu.showAtLocation(PopMenuActivity.this.gridviewToolbar, Gravity.BOTTOM,0, this.height);this.isShow = true;}}private class PopupBodyOnItemClickListenerCallback implementsOnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {PopMenuActivity.this.popMenu.setPopBodySelected(position, Color.GRAY) ;Toast.makeText(PopMenuActivity.this, "执行选项 - " + position, Toast.LENGTH_SHORT).show() ;}}private class PopupTitleOnItemClickListenerCallback implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {PopMenuActivity.this.popMenu.setPopTitleSelected(position) ;switch(position) {case 0:PopMenuActivity.this.popMenu.setPopupMenuBodyAdapter(PopMenuActivity.this.commonAdapter);break;case 1:PopMenuActivity.this.popMenu.setPopupMenuBodyAdapter(PopMenuActivity.this.setAdapter);break;case 2:PopMenuActivity.this.popMenu.setPopupMenuBodyAdapter(PopMenuActivity.this.toolAdapter);break;}}}
}

到这里就大功告成了,下面是效果图

这些图片是我从教程里拿的,下面看看弹出菜单的效果。

ActivityGroup的使用相关推荐

  1. ActivityGroup是如何对嵌入的Activitys进行管理的

    2019独角兽企业重金招聘Python工程师标准>>> 此前,我们对Activity进行了一些学习,在Android中,还提供了一个ActivityGroup类,该类是Activit ...

  2. [置顶] ActivityGroup自我堆栈管理(复用现有activity)

    密码管理请下载: http://a.app.qq.com/o/simple.jsp?pkgname=com.wa505.kf.epassword package com.dczs.activity; ...

  3. ActivityGroup自我堆栈管理(复用现有activity)

    密码管理请下载: http://a.app.qq.com/o/simple.jsp?pkgname=com.wa505.kf.epassword package com.dczs.activity;i ...

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

    下面图片是测试程序的效果图          两个选项卡的实现      布局文件  main.xml   Xml代码   <?xml version="1.0" encod ...

  5. 使用ActivityGroup需要注意的地方

    Group里面的所有"孩子Activity"不能直接调用finish(),只能等ActivityGroup调用它自己的finish()后,会自动调用所有"孩子Activi ...

  6. Android使用ActivityGroup设置android:windowSoftInputMode失效的问题

    前言 当使用ActivityGroup--设置Activity的android:windowSoftInputMode为stateHidden隐藏软键盘时,有可能出现隐藏失败的问题,在模拟器中以及MO ...

  7. ActivityGroup中的子Activity创建Dialog:android.view.WindowManager$BadTokenException: U

    我们在ActivityGroup或者TabActivity中的子Activity创建Dialog若使用以下的代码 progressDialog = new ProgressDialog(XXX.thi ...

  8. Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签

    很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架.读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityG ...

  9. ActivityGroup 实现分页和自定义标签(内有GridView的点击背景样式的改变方法)

    我这里实现的是方法和这个帖子的主要差别的就是界面都是自定义的.这样可以实现很多美观的分页,新浪微博等的效果一样可以达到.上效果图如下: 可以看到下方的就是标签界面了,这是一个GridVIew.很多人都 ...

  10. Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),...

    为什么80%的码农都做不了架构师?>>>    可以说ActivityGroup是Google提供的一个非常优秀的API,但它需要做稍微复杂的重写才能用起来比较方便,本文拟将实现这个 ...

最新文章

  1. 大数据概述 ——林子雨老师第一课
  2. 2022.3.25黄花酢浆草
  3. java 处理byte_java - 文件到Java中的byte [] - 堆栈内存溢出
  4. 业内大佬怒喷 Windows 10 Cloud:最大的流氓软件!
  5. 【Brain】脑智前沿科普|用数学解释大脑学习的过程
  6. mysql中的replication_MySQL Replication(主从服务器)配置实例
  7. git 微盘_GitHub - 123ufo/VdiskSDK-Android: 微盘Android客户端SDK
  8. linux办公软件wps字体,linux版wps-office安装缺少的字体
  9. php实现根据身份证获取年龄的函数
  10. 十道经典javaWeb面试题
  11. Jquery 插件开发——citylinkage(省、市、县城市联动选择)
  12. 翻译app上的图片文字信息提取好神奇?如何实现一个文字图片识别程序
  13. 视频流中实时人脸检测
  14. 【堆】leetcode378.有序矩阵中第K小的元素
  15. 信息安全实验五 之 计算机病毒与黑客实验脚本【恶意网页病毒演示病毒制作木马捆绑】
  16. 非常实用,Android引用ttf图标字体库
  17. ODOO芯片制造委外加工业自动化解决方案
  18. JS小游戏_能坚持几秒
  19. 时序数据预测-SARIMA篇
  20. linux 修改终端字体,linux系统终端修改字体的方法

热门文章

  1. 快逸报表数据库密码加密解决方案
  2. Python根据歌曲id爬取网易云音乐歌词
  3. App 瘦身最全最佳实践
  4. 自动控制原理第七版胡寿松pdf_自动控制原理简明笔记—(05)
  5. 父与子的编程之旅 python 3 pdf_父与子的编程之旅pdf微盘
  6. Linux Redhat7 防火墙关闭/开启查看
  7. android模拟器 gpu,Android模拟器新版升级,新增GPU支持、多点触摸等功能【视频】...
  8. 【QT编程】QT介绍——What‘s QT?
  9. java使用谷歌验证码google captcha
  10. 用java输出语句_Java的常用输入输出语句