准备图片,它们的名字分别为:picture、menu_exit、menu_main、menu_more、menu_news、

menu_selected、menu_sms、pic_m、common_account、common_addmark、common_download、

common_fullscreen、common_history、common_night、common_refresh、icon、menu_contact、

menu_phone、set_button、set_mode、set_nophoto、set_rotation、set_scroll、set_skin、

set_system、set_time、tool_back、tool_copy、tool_file、tool_help、tool_report、

tool_save、tool_share

在strings.xml添加文字信息:

<resources>

<string name="app_name">ActivityGroup基本菜单</string>

<string name="hello_world">Hello world!</string>

<string name="menu_settings">Settings</string>

<string name="title_activity_my_activity_group_demo">MyActivityGroupDemo</string>

<string name="popmenu_common">常用</string>

<string name="popmenu_set">设置</string>

<string name="popmenu_tool">工具</string>

</resources>

在main.xml中:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#000000"

android:gravity="center_horizontal"

android:orientation="vertical">

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout

android:id="@+id/content"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

</LinearLayout>

<GridView

android:id="@+id/gridviewbar"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:fadingEdgeLength="5dp"

android:fadingEdge="vertical"/>

</RelativeLayout>

</LinearLayout>

新建布局文件mylayout.xml:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#000000"

android:gravity="center_horizontal"

android:orientation="vertical">

<ImageView

android:layout_marginTop="60dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/picture"/>

</LinearLayout>

在主Activity(MyActivityGroupDemo.java)中:

package com.li.activitygroupproject;

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 MyActivityGroupDemo 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_save,

R.drawable.tool_share};

private int titleIds[] = new int[]{R.string.popmenu_common,

R.string.popmenu_set,R.string.popmenu_tool};

private PopupMenu popMenu = null;

private PopupMenuBodyAdapter commonAdapter = null;

private PopupMenuBodyAdapter setAdapter = null;

private PopupMenuBodyAdapter toolAdapter = null;

@Override

public 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 PopupMenu(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 {

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

MyActivityGroupDemo.this.switchActivity(position);

}

}

private void switchActivity(int id) { // 切换选中的操作

this.menu.setFocus(id); // 设置选中图片的背景

this.content.removeAllViews(); // 删除所有的内容

switch (id) {

case 0:

this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

break;

case 1:

this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);

break;

case 2:

this.intent = new Intent(MyActivityGroupDemo.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() {

public void onClick(DialogInterface dialog, int which) {

MyActivityGroupDemo.this.finish() ;

}

})

.setNegativeButton("取消", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

MyActivityGroupDemo.this.switchActivity(0);

}

}).create();

dialog.show();

}

@Override

public 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(MyActivityGroupDemo.this

.gridviewToolbar, Gravity.BOTTOM, 0,this.height);

this.isShow = true;

}

}

private class PopupBodyOnItemClickListenerCallback implements OnItemClickListener{

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

MyActivityGroupDemo.this.popMenu.setPopBodySelected(position, Color.GRAY);

Toast.makeText(MyActivityGroupDemo.this, "您选择了第" + (position+1) + "项", Toast.LENGTH_LONG).show();

}

}

private class PopupTitleOnItemClickListenerCallback implements OnItemClickListener{

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

MyActivityGroupDemo.this.popMenu.setPopTitleSelected(position);

switch(position){

case 0:

MyActivityGroupDemo.this.popMenu.setPopupMenuBodyAdapter(

MyActivityGroupDemo.this.commonAdapter);

break;

case 1:

MyActivityGroupDemo.this.popMenu.setPopupMenuBodyAdapter(

MyActivityGroupDemo.this.setAdapter);

break;

case 2:

MyActivityGroupDemo.this.popMenu.setPopupMenuBodyAdapter(

MyActivityGroupDemo.this.toolAdapter);

break;

}

}

}

}

在MenuImageAdapter.java中:

package com.li.activitygroupproject;

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 ImageView[] menuImg; // 保存所有要填充的组件

private Context context = null; // 上下文对象

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++) {

this.menuImg[x] = new ImageView(this.context); // 实例化ImageView

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() {

return this.menuImg.length;

}

public Object getItem(int position) {

return this.menuImg[position];

}

public long getItemId(int position) {

return 0;

}

public View getView(int position, View convertView, ViewGroup parent) {

ImageView imgView = null ;

if(convertView == 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) ;

}

}

在MyActivity.java中:

package com.li.activitygroupproject;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.MenuItem;

import android.support.v4.app.NavUtils;

public class MyActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.mylayout);

}

}

在PopuMenuTitlAdapter.java中:

package com.li.activitygroupproject;

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 PopuMenuTitlAdapter extends BaseAdapter {

private TextView menuTitle[] = null; //文字显示组件

private int fontColor;    //文字显示的颜色

private int selectedColor;  //选中的颜色

private int unSelectdColor;   //未选中的颜色

public PopuMenuTitlAdapter(Context context,int[] titleIds,

int fontColor,int fontSize,int selectedColor,

int unSelectedColor){

this.fontColor = fontColor;

this.selectedColor = selectedColor;

this.unSelectdColor = 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);

}

}

public int getCount() {

return this.menuTitle.length;

}

public Object getItem(int position) {

return this.menuTitle[position];

}

public long getItemId(int position) {

return this.menuTitle[position].getId();

}

public 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.unSelectdColor));

this.menuTitle[x].setTextColor(fontColor);

}

}

this.menuTitle[index].setBackgroundColor(0x00);

this.menuTitle[index].setTextColor(this.selectedColor);

}

}

在PopupMenu.java中:

package com.li.activitygroupproject;

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 PopupMenu extends PopupWindow {

private GridView popTitle;    //表示标题

private GridView popBody;   //表示主体

private PopuMenuTitlAdapter titlAdapter = null;

private LinearLayout layout = null;

public PopupMenu(Context context,int titleIds[],int backgroundColor,

OnItemClickListener titleCallback,

OnItemClickListener bodyCallback){

super(context);    //需要创建弹出的组件

this.titlAdapter = new PopuMenuTitlAdapter(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);    //水平间距为1

this.popTitle.setVerticalSpacing(1);    //垂直间距为1

this.popTitle.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);  //拉伸列宽

this.popTitle.setOnItemClickListener(titleCallback);

this.popTitle.setAdapter(this.titlAdapter);

this.popBody = new GridView(context);

this.popBody.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.WRAP_CONTENT));

this.popBody.setNumColumns(5);

this.popTitle.setHorizontalSpacing(1);    //水平间距为1

this.popTitle.setVerticalSpacing(1);    //垂直间距为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.titlAdapter.setFocus(postion);

}

public void setPopBodySelected(

int position,int selecteColor){  //设置选中后的颜色

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(selecteColor); //设置被选中

}

}

在PopupMenuBodyAdapter.java中:

package com.li.activitygroupproject;

//这是一个图片适配器

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]);

}

}

public int getCount() {

return this.menuImg.length;

}

public Object getItem(int position) {

return this.menuImg[position];

}

public long getItemId(int position) {

return this.menuImg[position].getId();

}

public View getView(int position, View convertView, ViewGroup parent) {

View view = null;

if(convertView == null){

view = this.menuImg[position];

}

else{

view = convertView;

}

return view;

}

}

修改AndroidManifest.xml文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.li.activitygroupproject"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="15" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MyActivityGroupDemo"

android:label="@string/title_activity_my_activity_group_demo" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".MyActivity"/>

<activity android:name=".MenuImageAdapter"/>

</application>

</manifest>

ActivityGroup弹出菜单相关推荐

  1. JQUERY打造隐藏在左侧的弹性弹出菜单

    代码简介: 隐藏在左侧的弹性弹出菜单,从淘宝扣下来的,也可作为JAvaScript缓冲动画的典型教程.本弹性菜单可扩展性强,实际上不光可以做成菜单,也可布局一些图文混排的内容或一段视频,总之被弹出的内 ...

  2. vc+如何添加右键弹出菜单

    2019独角兽企业重金招聘Python工程师标准>>> 一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图 ...

  3. python tkinter 下拉框_python中tkinter入门之Menu创建顶级菜单、下拉菜单和弹出菜单。...

    创建顶级菜单 Menu 组件通常被用于实现应用程序上的各种菜单.使用add_command可以添加菜单内容.创建后通过root.config()添加到窗口上. from tkinter import ...

  4. 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 参考文章: (1)如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 (2)https://ww ...

  5. android 单选、多选弹出菜单

    菜单单选窗口: import android.app.Activity; import android.app.AlertDialog; import android.content.DialogIn ...

  6. 纯CSS三级弹出菜单

    以前收藏的代码,贴出来分享下.兼容IE\FF. CSS: <style type="text/css"> /**//*common styling*/.menu{}{f ...

  7. 机器性能这么好,为什么点击右键弹出菜单还这么慢?

    为什么80%的码农都做不了架构师?>>>    我想很多人估计遇到过这样的问题,一开始估计会怀疑是系统问题或者是有什么硬件瓶颈. 其实不然, 在与一位同事交流后发现,其实问题的原因很 ...

  8. 教你如何创建类似QQ的android弹出菜单

    热心推荐: Android  ListView两种长按弹出菜单方式 popupwindow实现弹出菜单效果 Android人才招聘--最新招聘 大家可能看到 android 的自带的系统菜单比较难看, ...

  9. DirectUI界面编程(六)实现右键弹出菜单

    本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...

最新文章

  1. B站讲演 | 我为什么要做科普视频?
  2. 父子对等组之间的关系
  3. centos 安装指定版本gc_番外篇 (1) Docker 安装
  4. 实用技巧:教你如何在没有网络的Linux机器上快速安装软件
  5. mysql分窗函数_频谱分析中如何选择合适的窗函数
  6. 思科ACL阻止勒索病毒
  7. R7-3 福到了 (10 分)
  8. Python内置函数使用说明
  9. tar解压时遇到tar: Skipping to next header
  10. 178.16. cvs release
  11. 互联网创新创业大赛优秀范例_大学生互联网+创新创业优秀案例选辑.第一辑...
  12. jtopo 折叠与展开子节点
  13. matlab2009a下载 win7,MATLAB R2009a完美安装及下载
  14. 受益于人工智能的发展,人们可以以前所未有的时空分辨率系统地观察神经活动
  15. 找零程序Java_动态规划——硬币找零问题(java)
  16. 深度剖析头条面试真题 | 二叉树那点事儿
  17. sniper photo
  18. 重定向与请求转发的区别及什么时候使用
  19. 第六章:MATLAB:二维绘图(plot绘图命令 fplot命令 ezplot命令 不同的坐标系)
  20. 站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读

热门文章

  1. Ribbon重试的坑
  2. 用python画一束满天星花朵,python满天星绘制流程图
  3. spring boot配置mysql
  4. vue纯静态登录页面
  5. 用Android Studio设计一个简单个性的登录界面
  6. 开着房车去旅行,总有一种生活是你所追求!
  7. SharePoint备份文件
  8. 新手机用到电量剩余多少充电好
  9. 【java】方法练习3-定义两个重载的方法,分别求圆和长方形的面积
  10. 51nod2015 诺德街