`
AndroidLL
  • 浏览: 74879 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android自定义menu的实现

阅读更多

 

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);
}
分享到:
评论

相关推荐

    android自定义menu

    1. **创建自定义Menu** - 在`onCreateOptionsMenu(Menu menu)`中,通过调用`menu.add()`方法来添加菜单项。你可以设置其标题、图标、快捷键等属性。 - 使用`MenuItem`对象的`setOnMenuItemClickListener()`或`...

    Android提高十八篇之自定义Menu(TabMenu)

    在Android开发中,自定义Menu和TabMenu是提升用户体验、个性化应用界面的重要手段。这篇“Android提高十八篇之自定义Menu(TabMenu)”的主题聚焦于如何在Android应用中创建和定制化自己的菜单栏和标签页功能。下面...

    android使用popupwindow自定义menu菜单

    下面是一段示例代码,展示了如何创建一个简单的自定义menu菜单: ```java // 加载布局 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View popupView = ...

    android自定义弹出menu

    本示例“android自定义弹出menu”着重介绍了如何创建一个类似于QuickContactBadge的自定义菜单,它具有出色的动画效果,提升了应用的用户体验。 QuickContactBadge是Android SDK中一个用于快速联系的组件,点击后...

    Android自定义标题栏

    总结,Android自定义标题栏是一项关键的UI定制技术,它让开发者能够创建符合品牌风格的界面,提升用户交互体验。通过学习和实践,我们可以熟练掌握自定义标题栏的各种技巧,包括但不限于添加菜单项、设置点击事件、...

    android自定义通用PopupWindow

    下面是一个基础的实现: ```java public class CommonPopWindow extends PopupWindow { public CommonPopWindow(Context context, int layoutResId) { // 初始化PopupWindow,传入上下文和布局资源ID super...

    android 自定义菜单

    本篇文章将深入探讨如何在Android系统中实现自定义菜单,并提供相关的知识点。 首先,我们来理解Android中的标准菜单(Menu)。在Android中,菜单通常在三种场景下出现:选项菜单(Option Menu)、上下文菜单...

    android自定义菜单使用技巧

    本文将深入探讨如何实现Android自定义菜单,并结合QuickContactBadge控件的使用,为用户提供更加丰富的交互体验。 首先,我们来了解自定义菜单的基本概念。在Android中,菜单通常在Action Bar或Overflow Menu中显示...

    android 自定义菜单实现 (仿UC浏览器)

    本文将深入探讨如何在Android中实现自定义菜单,以达到类似UC浏览器的效果。 首先,我们需要理解Android菜单的基本概念。在Android中,菜单通常在三种场景下出现:选项菜单(Option Menu)、上下文菜单(Context ...

    Android自定义菜单属性DEMO

    本DEMO,"Android自定义菜单属性DEMO",旨在教你如何为Android应用创建一个带有自定义属性的菜单按钮。这个教程是基于CSDN博主janice0529的一篇博客文章,你可以通过提供的链接获取详细的源码解析。 首先,我们要...

    Android自定义实现侧滑菜单效果

    本文将详细介绍如何在Android中自定义实现一个侧滑菜单。 首先,要创建侧滑菜单,我们需要继承自`ViewGroup`。这是因为`ViewGroup`是所有布局容器的基础类,它提供了处理子视图布局的能力。在自定义控件中,我们...

    Android编程自定义菜单实现方法详解

    总结来说,Android编程自定义菜单实现方法主要包括以下步骤: 1. 创建菜单布局:使用XML定义菜单的结构,包括菜单项的数量、位置和样式。 2. 隐藏和显示菜单:通过设置`View`的`visibility`属性,结合动画效果实现...

    自定义Dialog实现Menu菜单

    总之,自定义Dialog实现Menu菜单是Android开发中的一个实用技能,通过结合DialogFragment、GridView和自定义适配器,我们可以创建出风格独特、功能强大的交互界面。这个过程不仅能帮助开发者掌握Android UI设计,也...

    Android 自定义组件卫星菜单的实现

    本篇文章将详细探讨如何实现一个Android自定义组件——卫星菜单(Satellite Menu),也称为ArcMenu。卫星菜单是一种以中心按钮为触发点,围绕中心点展开的一组按钮布局,常用于导航或展示附加功能。 首先,我们定义...

    popupwindow实现自定义Menu

    接下来,我们讨论如何实现自定义的`Menu`。通常,我们会创建一个包含多个选项的布局文件(如`BottomMenuDemo`),然后加载到`PopupWindow`中。例如,`BottomMenuDemo.xml`可能包含几个`Button`或`TextView`作为菜单...

    android 自定义字体Demo

    本教程将通过一个名为“android自定义字体Demo”的项目来详细讲解如何在Android应用中实现自定义字体的加载和切换。 首先,我们需要了解Android系统对字体的支持。Android原生支持的字体类型主要是TrueType Font ...

Global site tag (gtag.js) - Google Analytics