`

Android学习10-----Android组件通信 (3) ActivityGroup

阅读更多

导航栏在 Android 中的应用是很常见的,前面我们学习 Android 组件时发现 TabHost 组件是可以完成的,但是 TabHost 组件在操作中因为其使用困难,所以一般不会作为界面分页框架的首选,使用最多的是 ActivityGroup GridView 相结合的方式完成。

         每一个 Activity 程序都是采用屏幕独占的方式运行的,而使用 ActivityGroup 就可以让多个 Activity 同事运行在一个屏幕上,而且每一个 Activity 还会继续独立的工作,在 Android 之中专门为用户提供了 android.app. ActivityGroup 类。

         可以简单的理解为一个 ActivityGroup 中就包含了多个 Activity 程序。

ActivityGroup 类中常用方法:

No.

方法

描述

1

public Activity getCurrentActivity()

取得当前的 Activity 对象

2

public final LocalActivityManager getLocalActivityManager

取得 LocalActivityManager 类的对象

 

一、基本菜单展示,为了方便,我们把所有菜单都跳转到一个 Activity 程序之中

mylayout.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">
	<ImageView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:src="@drawable/android_book" />
</LinearLayout>

 

MyActivity.java(读取mylayout图片)

package com.iflytek.demo;

import android.app.Activity;
import android.os.Bundle;

public class MyActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.mylayout);
	}
}
 

main.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 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
		<LinearLayout 
			xmlns:android="http://schemas.android.com/apk/res/android"
			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="5px"
			android:fadingEdge="vertical"/>
	</RelativeLayout>
</LinearLayout>

 

下面关键在于如何处理GridView中显示的内容,对于内容只能由用户自己定义一个内容的填充器完成。
MenuImageAdapter.java

package com.iflytek.demo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

/**
 * 
 * @author xdwang
 * 
 * @create 2012-10-24 下午9:46:27
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 图片适配器
 * 
 */
public class MenuImageAdapter extends BaseAdapter {
	/**
	 * 保存所有要填充的组件
	 */
	private ImageView[] menuImg;
	/**
	 * 上下文对象
	 */
	private Context context = null;
	/**
	 * 选中时展示的图片
	 */
	private int selectedMenuImg;

	/**
	 * 
	 * @param context
	 *            上下文对象
	 * @param imgIds
	 *            所有的图片集合
	 * @param width
	 *            图片的宽度
	 * @param height
	 *            图片的高度
	 * @param 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 i = 0; i < imgIds.length; i++) {
			this.menuImg[i] = new ImageView(this.context); // 实例化ImageView
			this.menuImg[i].setLayoutParams(new GridView.LayoutParams(width,
					height)); // 设置图片的大小
			this.menuImg[i].setAdjustViewBounds(false); // 不调整边界显示
			this.menuImg[i].setPadding(3, 3, 3, 3);// 设置间距
			this.menuImg[i].setImageResource(imgIds[i]);// 设置显示图片
		}
	}

	@Override
	public int getCount() {
		return this.menuImg.length;
	}

	@Override
	public Object getItem(int position) {
		return this.menuImg[position];
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	@Override
	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;
	}

	/**
	 * @descrption 设置选中的显示
	 * @author xdwang
	 * @create 2012-10-24下午9:49:03
	 * @param selId
	 *            选中时展示的图片
	 */
	public void setFocus(int selId) {
		for (int i = 0; i < this.menuImg.length; i++) {
			if (i != selId) { // 没有选中的
				this.menuImg[i].setBackgroundResource(0); // 不设置背景图片
			}
		}
		this.menuImg[selId].setBackgroundResource(this.selectedMenuImg);
	}
}

 ActivityGroup01Activity.java

package com.iflytek.demo;

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;

public class ActivityGroup01Activity 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;

	/** Called when the activity is first created. */
	@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);//设置垂直间隔为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());
	}

	/**
	 * 
	 * @author xdwang 
	 *
	 * @create 2012-10-24 下午11:01:40
	 * 
	 * @email:xdwangiflytek@gmail.com
	 * 
	 * @description 工具栏菜单的单击事件
	 *
	 */
	private class OnItemClickListenerImpl implements OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ActivityGroup01Activity.this.switchActivity(position);
		}
	}

	/**
	 * @descrption 切换选中的操作
	 * @author xdwang
	 * @create 2012-10-24下午10:35:02
	 * @param id 选中的索引
	 */
	private void switchActivity(int id) {
		this.menu.setFocus(id); // 设置选中图片的背景
		this.content.removeAllViews(); // 删除所有的内容
		switch (id) {
		case 0:
			this.intent = new Intent(ActivityGroup01Activity.this,
					MyActivity.class);
			break;
		case 1:
			this.intent = new Intent(ActivityGroup01Activity.this,
					MyActivity.class);
			break;
		case 2:
			this.intent = new Intent(ActivityGroup01Activity.this,
					MyActivity.class);
			break;
		case 3:
			this.intent = new Intent(ActivityGroup01Activity.this,
					MyActivity.class);
			break;
		case 4:
			this.exitDialog();
			return;
		}
		//增加一个标记,FLAG_ACTIVITY_CLEAR_TOP表示情况Activity上面的内容
		this.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		// 表示在这里启动
		Window subActivity = super.getLocalActivityManager().startActivity(
				"subActivity", this.intent);
		//在内容中加入view
		//subActivity.getDecorView()表示获取顶端视图
		this.content.addView(subActivity.getDecorView(),
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
	}

	/**
	 * @descrption 退出对话框
	 * @author xdwang
	 * @create 2012-10-24下午10:42:03
	 */
	private void exitDialog() {
		Dialog dialog = new AlertDialog.Builder(this)
				.setIcon(R.drawable.ic_launcher).setTitle("程序退出? ")
				.setMessage("您确定要退出本程序吗?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						ActivityGroup01Activity.this.finish();
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						ActivityGroup01Activity.this.switchActivity(0);
					}
				}).create();

		dialog.show();
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.exitDialog();
		}
		return false;
	}

}

 效果图:

 

二、弹出菜单(进一步扩展菜单项)
有时候可以发现菜单项太多了,只能在原来的基础上弹出一个子菜单。
为了操作更加专业,下面定义strings.xml文件,增加一些文字性的信息
strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, ActivityGroup02Activity!</string>
    <string name="app_name">弹出菜单</string>
    <string name="popmenu_common">常用</string>
    <string name="popmenu_set">设置</string>
    <string name="popmenu_tool">工具</string>

</resources>

 下面就要继续开发满足于标题显示的适配器类
PopupMenuTitleAdapter.java

package com.iflytek.demo;

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;

/**
 * 
 * @author xdwang
 * 
 * @create 2012-10-24 下午11:24:00
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 标题显示的适配器
 * 
 */
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 i = 0; i < titleIds.length; i++) {
			this.menuTitle[i] = new TextView(context);
			this.menuTitle[i].setText(titleIds[i]);
			this.menuTitle[i].setTextSize(fontSize);
			this.menuTitle[i].setGravity(Gravity.CENTER);
			this.menuTitle[i].setPadding(10, 10, 10, 10);
		}
	}

	@Override
	public int getCount() {
		return this.menuTitle.length;
	}

	@Override
	public Object getItem(int position) {
		return this.menuTitle[position];
	}

	@Override
	public long getItemId(int position) {
		return this.menuTitle[position].getId();
	}

	@Override
	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 i = 0; i < this.menuTitle.length; i++) {
			if (i != index) {
				this.menuTitle[i].setBackgroundDrawable(new ColorDrawable(
						this.unSelectedColor));
				this.menuTitle[i].setTextColor(fontColor);
			}
		}
		this.menuTitle[index].setBackgroundColor(0x00);
		this.menuTitle[index].setTextColor(this.selectedColor);
	}
}

 

下面定义菜单主体项的适配器
PopupMenuBodyAdapter.java

package com.iflytek.demo;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

/**
 * 
 * @author xdwang
 * 
 * @create 2012-10-24 下午11:31:28
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 菜单主题项的适配器
 * 
 */
public class PopupMenuBodyAdapter extends BaseAdapter {
	/**
	 * 所有图片
	 */
	private ImageView[] menuImg = null;

	public PopupMenuBodyAdapter(Context context, int[] picIds) {
		this.menuImg = new ImageView[picIds.length];
		for (int i = 0; i < this.menuImg.length; i++) {
			this.menuImg[i] = new ImageView(context);
			this.menuImg[i].setImageResource(picIds[i]);
		}
	}

	@Override
	public int getCount() {
		return this.menuImg.length;
	}

	@Override
	public Object getItem(int position) {
		return this.menuImg[position];
	}

	@Override
	public long getItemId(int position) {
		return this.menuImg[position].getId();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View view = null;
		if (convertView == null) {
			view = this.menuImg[position];
		} else {
			view = convertView;
		}
		return view;
	}

}

 

现在两个适配器搞定之后,下面最重要的就是弹出的窗口了。
现在之前的popupWindow组件已经不能被现在的操作所使用,所以必须扩充功能,扩充组件。
PopupMenu.java

package com.iflytek.demo;

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;

/**
 * 
 * @author xdwang
 * 
 * @create 2012-10-24 下午11:49:42
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 自定义的PopupWindow
 * 
 */
public class PopupMenu extends PopupWindow {
	/**
	 * 表示标题
	 */
	private GridView popTitle;
	/**
	 * 标题主体
	 */
	private GridView popBody;

	private PopupMenuTitleAdapter titleAdapter = null;
	private LinearLayout linearLayout = null;

	public PopupMenu(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.linearLayout = new LinearLayout(context);
		this.linearLayout.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.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.linearLayout.addView(this.popTitle);
		this.linearLayout.addView(this.popBody);
		super.setContentView(this.linearLayout);
		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);
	}

	/**
	 * @descrption 设置选中后的颜色
	 * @author xdwang
	 * @create 2012-10-24下午11:59:34
	 * @param position
	 * @param selectedColor
	 */
	public void setPopBodySelected(int position, int selectedColor) {
		int count = this.popBody.getChildCount();
		for (int i = 0; i < count; i++) {
			if (i != position) {
				ImageView img = (ImageView) this.popBody.getChildAt(i);
				img.setBackgroundColor(Color.TRANSPARENT);
			}
		}
		ImageView img = (ImageView) this.popBody.getChildAt(position);
		img.setBackgroundColor(selectedColor);
	}
}

 

图片适配器MenuImageAdapter.java和上面的基本菜单一致

ActivityGroup02Activity.java

package com.iflytek.demo;

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 ActivityGroup02Activity 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 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 {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ActivityGroup02Activity.this.switchActivity(position);
		}
	}

	/**
	 * @descrption 切换选中的操作
	 * @author xdwang
	 * @create 2012-10-24下午11:50:22
	 * @param id
	 */
	private void switchActivity(int id) {
		this.menu.setFocus(id); // 设置选中图片的背景
		this.content.removeAllViews(); // 删除所有的内容
		switch (id) {
		case 0:
			this.intent = new Intent(ActivityGroup02Activity.this,
					MyActivity.class);
			break;
		case 1:
			this.intent = new Intent(ActivityGroup02Activity.this,
					MyActivity.class);
			break;
		case 2:
			this.intent = new Intent(ActivityGroup02Activity.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() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						ActivityGroup02Activity.this.finish();
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						ActivityGroup02Activity.this.switchActivity(0);
					}
				}).create();

		dialog.show();
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.exitDialog();
		}
		return false;
	}

	/**
	 * @descrption 判断是否显示子菜单
	 * @author xdwang
	 * @create 2012-10-24下午11:38:26
	 */
	private void showPopupMenu() {
		if (this.isShow) { // 已经显示了
			this.popMenu.dismiss();
			this.isShow = false;
		} else {
			this.popMenu.showAtLocation(
					ActivityGroup02Activity.this.gridviewToolbar,
					Gravity.BOTTOM, 0, this.height);
			this.isShow = true;
		}
	}

	/**
	 * 
	 * @author xdwang
	 * 
	 * @create 2012-10-24 下午11:31:52
	 * 
	 * @email:xdwangiflytek@gmail.com
	 * 
	 * @description 内容栏事件回调
	 * 
	 */

	private class PopupBodyOnItemClickListenerCallback implements
			OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ActivityGroup02Activity.this.popMenu.setPopBodySelected(position,
					Color.GRAY);
			Toast.makeText(ActivityGroup02Activity.this, "执行选项 - " + position,
					Toast.LENGTH_SHORT).show();
		}
	}

	/**
	 * 
	 * @author xdwang
	 * 
	 * @create 2012-10-24 下午11:31:24
	 * 
	 * @email:xdwangiflytek@gmail.com
	 * 
	 * @description 标题栏的事件回调
	 * 
	 */
	private class PopupTitleOnItemClickListenerCallback implements
			OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ActivityGroup02Activity.this.popMenu.setPopTitleSelected(position);
			switch (position) {
			case 0:
				ActivityGroup02Activity.this.popMenu
						.setPopupMenuBodyAdapter(ActivityGroup02Activity.this.commonAdapter);
				break;
			case 1:
				ActivityGroup02Activity.this.popMenu
						.setPopupMenuBodyAdapter(ActivityGroup02Activity.this.setAdapter);
				break;
			case 2:
				ActivityGroup02Activity.this.popMenu
						.setPopupMenuBodyAdapter(ActivityGroup02Activity.this.toolAdapter);
				break;
			}
		}
	}
}
 

效果图:

 

 

 

 

 

 

 

 

  • 大小: 11.5 KB
  • 大小: 51.8 KB
分享到:
评论

相关推荐

    常用1.SchLib

    常用1.SchLib

    tokenizers-0.26.0.jar中文文档.zip

    # 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu

    电力系统PMU优化配置研究——基于MATLAB的多种算法实现与性能比较

    内容概要:本文详细探讨了电力系统中PMU(相量测量单元)的优化配置问题,旨在确保系统完全可观测的同时尽量减少PMU的数量。作者介绍了六种不同的算法,包括模拟退火、图论方法、递归安全N算法等,并通过MATLAB实现了这些算法。通过对IEEE标准测试系统的实验,展示了各种算法在不同规模系统中的表现。文中不仅提供了具体的MATLAB代码实现,还分享了许多实用的经验技巧,如邻域解生成、退火速率设置、拓扑排序等。 适合人群:从事电力系统研究的技术人员、研究生以及对组合优化感兴趣的科研工作者。 使用场景及目标:适用于电力系统状态估计、故障诊断等领域,帮助研究人员和工程师找到最优的PMU配置方案,提高系统的可靠性和经济性。 其他说明:文章强调了在实际应用中需要注意的问题,如变压器支路的影响、节点编号不连续等问题,并推荐了几篇相关领域的经典文献供进一步学习。此外,还提到了一些有趣的发现,如某些中间节点装PMU反而能减少总数。

    spring-ai-mistral-ai-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    三菱FX1s与台达MS300变频器基于Modbus RTU通讯的实战指南

    内容概要:本文详细介绍了三菱FX1s PLC与台达MS300变频器通过Modbus RTU协议实现通讯的方法。首先,文中列举了所需的硬件设备及其连接方法,确保PLC与变频器能够正常通信。接下来,针对频率设定、频率读取及正反转启停控制三大主要功能进行了详细的编程讲解,提供了具体的梯形图代码示例并解释了每一步的作用。此外,还涉及到了触摸屏(MCGS和威纶通)的配置步骤,使用户可以通过触摸屏方便地操作变频器的各项功能。最后,作者分享了一些实用的小技巧和常见错误避免方法,帮助使用者快速解决问题,提高工作效率。 适合人群:从事自动化控制系统集成的技术人员,尤其是那些需要将三菱PLC与台达变频器进行互联的工程师。 使用场景及目标:适用于工业自动化领域的项目实施过程中,旨在帮助技术人员掌握三菱FX1s与台达MS300变频器之间的高效通信技术,从而更好地完成系统集成任务。 其他说明:文中不仅包含了详细的理论知识和技术要点,还有丰富的实践经验分享,有助于读者全面理解和应用相关技术。同时,提供的完整工程文件可以直接应用于实际项目中,极大地节省了开发时间和成本。

    winrar免费版压缩工具

    winrar免费版压缩工具

    基于CEC21测试函数的灰狼、鲸鱼、人工蜂群优化算法性能对比及Matlab实现

    内容概要:本文详细介绍了灰狼算法(GWO)、鲸鱼算法(WOA)和人工蜂群算法(ABC)在CEC21标准测试函数集上的性能对比。通过设定相同的实验条件(种群数量50,迭代次数500次,30维问题空间),分别探讨了各算法的关键参数调整及其对不同类型函数(单峰、多峰、复合)的影响。文中提供了每个算法的核心代码片段,并针对具体函数给出了优化建议。最终结果显示,GWO在单峰函数上有优势,WOA擅长处理旋转和平移问题,而ABC在高维复杂环境中表现出色。 适合人群:从事优化算法研究的科研人员、研究生以及对智能优化算法感兴趣的开发者。 使用场景及目标:适用于需要评估和比较不同优化算法性能的研究项目,特别是那些涉及高维、多峰、旋转平移等问题的实际应用场景。目标是帮助研究人员选择最适合特定任务的优化算法,并提供参数调优的经验。 其他说明:文章不仅提供了理论分析,还分享了许多实践经验,如参数调整技巧、初始化方法等。此外,所有实验均基于Matlab平台完成,附带完整的代码实现,方便读者复现实验结果。

    电控开关.SchLib

    电控开关.SchLib

    spring-ai-autoconfigure-model-openai-1.0.0-M7.jar中文-英文对照文档.zip

    # 【spring-ai-autoconfigure-model-openai-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-autoconfigure-model-openai-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-autoconfigure-model-openai-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-model-openai-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-model-openai-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-model-openai-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-model-openai-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-autoconfigure-model-openai-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-model-openai,1.0.0-M7,org.springframework.ai.model.openai.autoconfigure,jar包,Maven,第三方jar包,组件,开源组件,第三方

    c++复习题.doc

    c++复习题.doc

    附件3:本科毕业设计(论文)中期检查报告(3)(1)(1).docx

    本科毕业设计(论文)中期检查报告

    【信号调制】使用不同的分类器(逻辑回归分类器、决策树、随机森林、全连接密集层和CNN)来训练模型,以预测不同信噪比值下信号的调制类型附Python代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    weixin248食堂订餐小程序ssm(文档+源码)_kaic

    weixin248食堂订餐小程序ssm(文档+源码)_kaic

    基于粒子群优化算法的微型燃气轮机冷热电联供系统优化调度附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    e1e90185ca2f1eda312e7f604d38195c_b4125f83523abcb38acd9dc0deebd500.png

    e1e90185ca2f1eda312e7f604d38195c_b4125f83523abcb38acd9dc0deebd500

    spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar中文-英文对照文档.zip

    # 【spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-autoconfigure-mcp-client-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-mcp-client-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-autoconfigure-mcp-client-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-mcp-client,1.0.0-M7,org.springframework.ai.mcp.client.autoconfigure,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springfram

    基于 OpenCV 的图像颜色与形状识别项目(含完整 Python 源码)

    该项目使用 OpenCV 实现图像中红色目标的识别与轮廓框选,适用于图像处理、颜色追踪与形状检测等场景。项目无需深度学习框架,适合图像识别技术入门学习。附带测试图像与运行说明,支持一键运行。

    爱威6-8电脑调音软件是专为音响爱好者和专业人士设计的一款强大工具,喜欢的话,直接下载吧

    爱威6-8电脑调音软件是专为音响爱好者和专业人士设计的一款强大工具,喜欢的话,直接下载吧

    spring-ai-vertex-ai-0.8.0.jar中文-英文对照文档.zip

    # 【spring-ai-vertex-ai-0.8.0.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-vertex-ai-0.8.0-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-vertex-ai-0.8.0.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-vertex-ai-0.8.0.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-vertex-ai-0.8.0.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-vertex-ai-0.8.0-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-vertex-ai-0.8.0.jar中文-英文对照文档.zip,java,spring-ai-vertex-ai-0.8.0.jar,org.springframework.ai,spring-ai-vertex-ai,0.8.0,org.springframework.ai.vertex,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,vertex,中文-英文对照API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-vertex-ai-0.8.0.jar中文-英文对照文档.zip】,再解压其中的 【spring-ai-vertex-ai-0.8.0-javadoc-API文档-中文(简体)-英语-对照版.zip】,双

    电源.SCHLIB

    电源.SCHLIB

Global site tag (gtag.js) - Google Analytics