您的位置:首页 > 其它

弹出菜单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;

}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: