弹出菜单Menu
2016-05-25 15:22
246 查看
1. 如何在optionMenu中加入图标
// enable为true时,菜单添加图标有效,enable为false时无效。4.0系统默认无效 private void setIconEnable(Menu menu, boolean enable) { try { Class<?> clazz = Class .forName("com.android.internal.view.menu.MenuBuilder"); Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class); m.setAccessible(true); // MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征) m.invoke(menu, enable); } catch (Exception e) { e.printStackTrace(); } }
@Override public boolean onCreateOptionsMenu(Menu menu) { // setIconEnable(menu, true); // MenuInflater inflater = getMenuInflater(); // inflater.inflate(R.menu.more, menu); /* * 利用反射机制调用MenuBuilder的setOptionalIconsVisible方法设置mOptionalIconsVisible为true,给菜单设置图标时才可见 */ setIconEnable(menu, true); String[] common = getResources().getStringArray(R.array.common); int[] drawable_resid = { R.drawable.ic_launcher, R.drawable.icon, .... }; for (int i = 0; i < common.length; ++i) { menu.add(1, Menu.FIRST + i, i, common[i]).setIcon(<span style="font-family: Arial, Helvetica, sans-serif;">drawable_resid[i]</span>); } return true; // return super.onCreateOptionsMenu(menu); }2. 弹出菜单Menu
// viewHolder? AlertDialog menuDialog;// menu菜单Dialog GridView menuGrid; View menuView; private Context mContext; private MyListener monOnItemClickListener; private Handler mHandler; public ZPopupMenu(Context context, MyListener listener, Handler handler) { this.mContext = context; this.monOnItemClickListener = listener; this.mHandler = handler; } public void initMenu(int flag) { menuView = View.inflate(mContext, R.layout.gridview_menu, null); // if(menuDialog==null){ // 创建AlertDialog menuDialog = new AlertDialog.Builder(mContext).create(); menuDialog.setView(menuView); menuDialog.setOnKeyListener(new OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU)// 监听按键 dialog.dismiss(); return true; // false? } }); menuDialog.show(); // }else{ // menuDialog.show(); // } if (flag == AREA) { menuGrid = (GridView) menuView.findViewById(R.id.gridview); menuGrid.setAdapter(Dic.getMenuAdapter(mContext, ZDGCApplication .getContext().getResources().getStringArray(R.array.area))); menuGrid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub int unitid = Dic.areaBO.get(arg2).getValue(); if (monOnItemClickListener != null) monOnItemClickListener.onChoose(AREA, unitid); // Message message = new Message(); // message.what = AREA; // message.obj = unitid; // mHandler.sendMessage(message); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } menuDialog.dismiss(); // Log.i("pop", "unitid="+unitid); } }); } else if (flag == UNIT) { menuGrid = (GridView) menuView.findViewById(R.id.gridview); menuGrid.setAdapter(Dic.getMenuAdapter(mContext, ZDGCApplication .getContext().getResources().getStringArray(R.array.unit))); menuGrid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub int humanid = Dic.unitBO.get(arg2).getValue(); if (monOnItemClickListener != null) monOnItemClickListener.onChoose(UNIT, humanid); // Message message = new Message(); // message.what = UNIT; // message.obj = humanid; // mHandler.sendMessage(message); // Log.i("pop", "humanid="+humanid); menuDialog.dismiss(); } }); } }3. 监听器
public interface MyListener { public void onChoose(int which, int id); }4. 获取全局context
public class ZDGCApplication extends Application { private static Context mContext; @Override public void onCreate() { // TODO Auto-generated method stub mContext = getApplicationContext(); } public static Context getContext() { return mContext; } }5. 队列对象
public static List<CategoryBO> areaBO; public static List<CategoryBO> unitBO; public static void initinalize() { areaBO = new ArrayList<CategoryBO>(); unitBO = new ArrayList<CategoryBO>(); String[] area = ZDGCApplication.getContext().getResources() .getStringArray(R.array.area); int[] area_id = ZDGCApplication.getContext().getResources() .getIntArray(R.array.area_id); for (int i = 0; i < area.length; ++i) { CategoryBO temp = new CategoryBO(); temp.setId(i); temp.setKey(area[i]); temp.setValue(area_id[i]); areaBO.add(temp); } String[] unit = ZDGCApplication.getContext().getResources() .getStringArray(R.array.unit); int[] unit_id = ZDGCApplication.getContext().getResources() .getIntArray(R.array.unit_id); for (int i = 0; i < unit.length; ++i) { CategoryBO temp = new CategoryBO(); temp.setId(i); temp.setKey(unit[i]); temp.setValue(unit_id[i]); unitBO.add(temp); } } public static SimpleAdapter getMenuAdapter(final Context context, String[] resourceArray) { // 此处可以加入图标,int[] resIcon ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < resourceArray.length; ++i) { HashMap<String, Object> temp = new HashMap<String, Object>(); temp.put("name", resourceArray[i]); data.add(temp); } SimpleAdapter adapter = new SimpleAdapter(context, data, R.layout.menuitem, new String[] { "name" }, new int[] { R.id.item_text }); return adapter; }
<pre name="code" class="java">public class CategoryBO { public int getId() { return id; } public void setId(int id) { this.id = id; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } private int id; private String key; private int value; }
相关文章推荐
- 在大规模并行处理器编程实战中遇到第四章的课后习题blocksize的问题
- android studio导入第三方依赖库遇到的问题
- js表单验证控制代码大全
- Android——手机内部文件存储(作业)
- 如何实现SAP的RFC函数调用(原创)
- 如何学习网络协议(学习笔记)
- Yii框架事务用法
- jquery 遍历数组 each 方法详解
- 一种融合异构信息网络和评分矩阵的推荐新算法
- Http报头Accept与Content-Type的区别
- .NET面试题
- C++作业-6
- JS表单验证
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- RSA IOS和Java
- windbg(1)
- iOS应用性能调优好文mark
- Ajax跨域和JSONP
- 第13周实践项目 多态性和实现 (3)
- iOS学习之Socket使用简明教程- AsyncSocket