- 浏览: 684369 次
- 性别:
- 来自: 安徽
-
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
导航栏在 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; } } } }
效果图:
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1639Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2547WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1915这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3330对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2218与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1921在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2923一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1434在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 2019一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1651一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 2043传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3553一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2078一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1547一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2312Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1775Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1579在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1311Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 2056在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1462Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
常用1.SchLib
# 【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(相量测量单元)的优化配置问题,旨在确保系统完全可观测的同时尽量减少PMU的数量。作者介绍了六种不同的算法,包括模拟退火、图论方法、递归安全N算法等,并通过MATLAB实现了这些算法。通过对IEEE标准测试系统的实验,展示了各种算法在不同规模系统中的表现。文中不仅提供了具体的MATLAB代码实现,还分享了许多实用的经验技巧,如邻域解生成、退火速率设置、拓扑排序等。 适合人群:从事电力系统研究的技术人员、研究生以及对组合优化感兴趣的科研工作者。 使用场景及目标:适用于电力系统状态估计、故障诊断等领域,帮助研究人员和工程师找到最优的PMU配置方案,提高系统的可靠性和经济性。 其他说明:文章强调了在实际应用中需要注意的问题,如变压器支路的影响、节点编号不连续等问题,并推荐了几篇相关领域的经典文献供进一步学习。此外,还提到了一些有趣的发现,如某些中间节点装PMU反而能减少总数。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
内容概要:本文详细介绍了三菱FX1s PLC与台达MS300变频器通过Modbus RTU协议实现通讯的方法。首先,文中列举了所需的硬件设备及其连接方法,确保PLC与变频器能够正常通信。接下来,针对频率设定、频率读取及正反转启停控制三大主要功能进行了详细的编程讲解,提供了具体的梯形图代码示例并解释了每一步的作用。此外,还涉及到了触摸屏(MCGS和威纶通)的配置步骤,使用户可以通过触摸屏方便地操作变频器的各项功能。最后,作者分享了一些实用的小技巧和常见错误避免方法,帮助使用者快速解决问题,提高工作效率。 适合人群:从事自动化控制系统集成的技术人员,尤其是那些需要将三菱PLC与台达变频器进行互联的工程师。 使用场景及目标:适用于工业自动化领域的项目实施过程中,旨在帮助技术人员掌握三菱FX1s与台达MS300变频器之间的高效通信技术,从而更好地完成系统集成任务。 其他说明:文中不仅包含了详细的理论知识和技术要点,还有丰富的实践经验分享,有助于读者全面理解和应用相关技术。同时,提供的完整工程文件可以直接应用于实际项目中,极大地节省了开发时间和成本。
winrar免费版压缩工具
内容概要:本文详细介绍了灰狼算法(GWO)、鲸鱼算法(WOA)和人工蜂群算法(ABC)在CEC21标准测试函数集上的性能对比。通过设定相同的实验条件(种群数量50,迭代次数500次,30维问题空间),分别探讨了各算法的关键参数调整及其对不同类型函数(单峰、多峰、复合)的影响。文中提供了每个算法的核心代码片段,并针对具体函数给出了优化建议。最终结果显示,GWO在单峰函数上有优势,WOA擅长处理旋转和平移问题,而ABC在高维复杂环境中表现出色。 适合人群:从事优化算法研究的科研人员、研究生以及对智能优化算法感兴趣的开发者。 使用场景及目标:适用于需要评估和比较不同优化算法性能的研究项目,特别是那些涉及高维、多峰、旋转平移等问题的实际应用场景。目标是帮助研究人员选择最适合特定任务的优化算法,并提供参数调优的经验。 其他说明:文章不仅提供了理论分析,还分享了许多实践经验,如参数调整技巧、初始化方法等。此外,所有实验均基于Matlab平台完成,附带完整的代码实现,方便读者复现实验结果。
电控开关.SchLib
# 【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
本科毕业设计(论文)中期检查报告
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
weixin248食堂订餐小程序ssm(文档+源码)_kaic
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
e1e90185ca2f1eda312e7f604d38195c_b4125f83523abcb38acd9dc0deebd500
# 【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 实现图像中红色目标的识别与轮廓框选,适用于图像处理、颜色追踪与形状检测等场景。项目无需深度学习框架,适合图像识别技术入门学习。附带测试图像与运行说明,支持一键运行。
爱威6-8电脑调音软件是专为音响爱好者和专业人士设计的一款强大工具,喜欢的话,直接下载吧
# 【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