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);
}
分享到:
相关推荐
一个自定义的menu , 类似于UC浏览器的menu
Android2.2版本中,如果你要修改菜单默认的背景颜色,网络上有许多的方法。在此就不说了。但是,如果要在2.2以上的版本修改菜单的样式,例如修改背景颜色,图片等,使用这些方法是没有任何作用的。因此自己写了一个...
android通过使用popupwindow控件实现自定义menu菜单
别人写的一个类型于QuickContactBadge的menu。非常的棒~
NULL 博文链接:https://daixj110.iteye.com/blog/980690
主要介绍了Android自定义Menu(TabMenu)实现方法,是非常实用的功能,需要的朋友可以参考下
android 菜单 menu android 菜单 menu android 菜单 menu android 菜单 menu android 菜单 menu
使用PopupWindow实现自定义menu,带动画及点击事件
android 一套自定义菜单 有图标 自定义一个tabmenu 继承PopupWindow menu做成Tab-Menu(支持分页Menu)
在Android的应用中,经常会见到底部菜单.而在企业级的Android应用中,也存在同样的需求,但与微信这些大众软件的区别在于企业级的Android应用由于UI页面很多,每个页面都需要有底部菜单,而且每个页面的底部菜单按钮...
主要实现的功能: 1、在java代码中动态设置底部控件的icon和text。(搭配fragment的时候特别方便) 2、text点击时会加粗 3、封装成自定义控件,更加方便。 (考虑到新手可能不易理解,笔者代码没有多加功能) 把底部...
2. Toolbar ActionBar自定义Menu 3. Toolbar ActionBar 右侧Menu添加角标(Toolbar ActionBar Menu添加小红点) 源代码在文章末尾。 ——————————————————————————– 效果预览 自定义Menu...
commonwebview 通用webview 显示加载进度,可放大和下载图片,自定义menu
简单实用的Android系统菜单与自定义菜单的实现方法,并对菜单的调用机制进行了全面验证。 开发环境:XP3+Eclipse+Android2.2+JDK6.0 测试环境:Android2.2模拟器
http://blog.csdn.net/janice0529/article/details/34425549 博客日志源码
主要介绍了Android自定义横向滑动菜单的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
仿酷狗Menu 仿淘宝Menu 代码简洁很适合新手学习