?
public class MainAcvtivity extends Activity { private int[] nameArr = new int[]{R.string.menu1,R.string.menu2,R.string.menu3,R.string.menu4}; private int[] imageArr = new int[]{R.drawable.menu1,R.drawable.menu2,R.drawable.menu3,R.drawable.menu4}; private MyMenu myMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initMenu(); } private void initMenu(){ myMenu = new MyMenu(this, nameArr, imageArr, 4) { @Override public void OnItemClick(int viewId) { switch (viewId) { case R.string.menu1: Toast.makeText(MainAcvtivity.this,getString(R.string.menu1), Toast.LENGTH_SHORT).show(); break; case R.string.menu2: Toast.makeText(MainAcvtivity.this,getString(R.string.menu2), Toast.LENGTH_SHORT).show(); break; case R.string.menu3: Toast.makeText(MainAcvtivity.this,getString(R.string.menu3), Toast.LENGTH_SHORT).show(); break; case R.string.menu4: Toast.makeText(MainAcvtivity.this,getString(R.string.menu4), Toast.LENGTH_SHORT).show(); break; } myMenu.menuDismiss(); } }; } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add("menu"); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuOpened(int featureId, Menu menu) { myMenu.showMenu(findViewById(R.id.main)); return false; }public abstract class MyMenu{ private MainAcvtivity AbsActivity; private int[] nameArr; private int[] imageArr; private int count; private PopupWindow mPopupWindow; private ViewFlipper mViewFlipper; private List<Map<String, Object>> data = new ArrayList<Map<String,Object>>(); public MyMenu(MainAcvtivity activity,int[] nameArr,int[] imageArr,int count){ this.AbsActivity = activity; this.nameArr = nameArr; this.imageArr = imageArr; this.count = count; initMenu(); } public void initMenu(){ mViewFlipper = new ViewFlipper(AbsActivity); LinearLayout mLinearLayout = (LinearLayout) AbsActivity.getLayoutInflater().inflate(R.layout.menu_view, null); mViewFlipper.addView(mLinearLayout); mViewFlipper.setFlipInterval(1000000); GridView mGridView = (GridView) mLinearLayout.findViewById(R.id.menu_gridview); mGridView.setNumColumns(count); mPopupWindow = new PopupWindow(mViewFlipper, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); mPopupWindow.setFocusable(true); mPopupWindow.update(); for (int i = 0; i < nameArr.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("itemIamge", imageArr[i]); map.put("itemText", AbsActivity.getString(nameArr[i])); map.put("key", nameArr[i]); data.add(map); } BaseAdapter adapter = new SimpleAdapter(AbsActivity, data, R.layout.menu_item, new String[]{"itemIamge","itemText"}, new int[]{R.id.menu_item_image,R.id.menu_item_text}); mGridView.setAdapter(adapter); mGridView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_MENU){ if(mPopupWindow != null){ mPopupWindow.dismiss(); } } return false; } }); mGridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int key = Integer.parseInt( data.get(position).get("key").toString()); OnItemClick(key); } }); } public void showMenu(View view){ if(mPopupWindow != null){ if(mPopupWindow.isShowing()){ mPopupWindow.dismiss(); }else{ mPopupWindow.getContentView().setEnabled(true); mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0); mViewFlipper.startFlipping(); } } } public void menuDismiss(){ if(mPopupWindow !=null && mPopupWindow.isShowing()){ mPopupWindow.dismiss(); } } public abstract void OnItemClick(int viewId);}