`
bkship
  • 浏览: 47855 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用popupWindow来制作自定义menu

 
阅读更多
我找了好久没发现怎么给系统自带的menu换背景,网上有个帖子写了相关方法,但是我没实现

所以才去了用popupwindow来实现menu:

先定义了这个popupwindow类:

public class MenuPopupWindow {
	public PopupWindow pop;
	private Context ctx;
	boolean isPopShowing = false;
	
	Handler menuHandler;
	public MenuPopupWindow(Context ctx,Handler menuHandler){
		this.ctx = ctx;
		
		this.menuHandler = menuHandler;
		initMenu();
	}
    private void initMenu() {
		LayoutInflater inflater = LayoutInflater.from(ctx);
		View view = inflater.inflate(R.layout.popwindow, null);

		pop = new PopupWindow(view, 480, 173);// 大小设置
		pop.setOutsideTouchable(false);
		// 很奇怪,不设置background 点击pop外面,pop不会消失
//		pop.setBackgroundDrawable(new BitmapDrawable());
		pop.setBackgroundDrawable(ctx.getResources().getDrawable(R.drawable.menubg));
		pop.setFocusable(true);// 如果不加这个,Grid不会响应ItemClick
		pop.setOnDismissListener(new OnDismissListener() {
			public void onDismiss() {
				isPopShowing = false;
			}
		});

		

		GridView menuGrid = (GridView) view.findViewById(R.id.gridview);
		menuGrid.setSelector(new ColorDrawable(Color.TRANSPARENT));
		menuGrid.setAdapter(new AdapterGridView(ctx));
//		menuGrid.setAdapter(getMenuAdapter(menuNameArray, menuImageArray));
		menuGrid.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				menuHandler.sendEmptyMessage(arg2);//发消息给主线程来处理
				if (pop.isShowing()) // 关闭菜单
					pop.dismiss();
			}
		});
		menuGrid.setOnKeyListener(onKey);

	}
    
	OnKeyListener onKey = new OnKeyListener() {
		public boolean onKey(View v, int keyCode, KeyEvent event) {
			// TODO Auto-generated method stub
			if (keyCode == KeyEvent.KEYCODE_MENU && isPopShowing == false) {
				isPopShowing = true;
			} else {
				isPopShowing = false;
				pop.dismiss();
			}
			return false;
		}
    };
    
}


然后在主程序里面 生成这个类的对象,在自己想要显示的位置显示之
MenuPopupWindow myPop = new MenuPopupWindow(this,menuHandler);
pop = myPop.pop;

public boolean onCreateOptionsMenu(Menu menu) {
	pop.showAtLocation(findViewById(R.id.main), Gravity.CENTER
				| Gravity.BOTTOM, 0, 0);
	return false;
}


popupwindow 里面的gridview设置的监听器 handler发出的消息会在主程序中做相应的动作

public Handler menuHandler = new Handler() {
	public void handleMessage(Message msg) {
		switch (msg.what) {
		case 0:
                        //do something
		        break;
		case 1:
                       //do something
			break;
		case 2:
                       //do something
			break;
		case 3:
                       //do something
			break;
		case 4:
                       //do something
			break;
		case 5:
                       //do something
			break;
		default:
			break;
			}
		}
	};


gridView里面 设置TRANSPARENT 是为了去掉 自身的点击效果,用来加上自己的selector

然后在adapter里面可以对 单个的Item 设置clickable 同时 换七背景来实现

类似menu的不可点击事件。
分享到:
评论

相关推荐

    android使用popupwindow自定义menu菜单

    本篇将详细介绍如何在Android中利用`PopupWindow`来实现自定义的menu菜单。 首先,我们需要了解`PopupWindow`的基本用法。`PopupWindow`类提供了创建和管理浮动窗口的功能。它可以在任意视图上方显示,可以设置大小...

    popupwindow实现自定义Menu

    在创建`PopupWindow`之后,我们可以通过`showAsDropDown()`或`showAtLocation()`方法来显示它。前者用于在某个控件下方显示,后者则允许指定具体的坐标。 接下来,我们讨论如何实现自定义的`Menu`。通常,我们会...

    android自定义通用PopupWindow

    封装`PopupWindow`的第一步是创建一个自定义的类,继承自`PopupWindow`。在这个类中,我们可以添加一些通用的方法,例如设置宽高、内容视图、背景颜色等。下面是一个基础的实现: ```java public class ...

    android使用PopUpWindow自定义下拉框

    本知识点将深入讲解如何利用`PopupWindow`来实现一个自定义的下拉框。 首先,`PopupWindow`的核心在于它的灵活性。它允许开发者在任意位置显示一个可定制的视图,而且可以设置大小、背景、动画效果等。创建`...

    Android自定义下拉框(PopupWindow实现)

    下面我们将按照以下步骤来实现一个自定义的下拉框: 1. **创建布局文件**: - 首先,我们需要为下拉框创建一个布局文件,例如`popup_window.xml`。这个布局将包含下拉框中的所有元素,比如ListView或RecyclerView...

    安卓popupwindow相关-自定义的PopupWindow的类.rar

    这个压缩包“安卓popupwindow相关-自定义的PopupWindow的类.rar”包含了一些自定义PopupWindow的示例代码,虽然不能确保所有代码都能直接运行,但它们可以作为学习和参考的资源。 首先,让我们了解PopupWindow的...

    安卓popupwindow相关-PopupWindow模仿UC底部Menu.rar

    本资源“安卓popupwindow相关-PopupWindow模仿UC底部Menu.rar”旨在帮助开发者了解如何使用PopupWindow来创建类似UC浏览器底部菜单的效果。 首先,我们来详细了解一下PopupWindow的基本概念。PopupWindow是Android ...

    自定义popupWindow修改版

    这可以通过设置PopupWindow的背景资源,或者自定义布局中的样式来实现。 2. **动画效果**:为了增加用户交互体验,可以为PopupWindow添加入场和退场动画。使用`Animation`类或者`ObjectAnimator`可以轻松实现。 3....

    popupWindow自定义

    PopupWindow是Android开发中...在项目中,可以利用PopupWindow实现如菜单、提示信息、表单填写等多种功能,提升用户体验。这个“popupWindow自定义”的项目就是一个很好的起点,帮助开发者掌握并熟练运用PopupWindow。

    安卓Android源码——PopupWindow模仿UC底部Menu.rar

    这个压缩包“安卓Android源码——PopupWindow模仿UC底部Menu.rar”显然是一个示例项目,它展示了如何利用`PopupWindow` 来创建一个与UC浏览器底部菜单类似的用户界面。下面我们将深入探讨`PopupWindow` 的工作原理...

    andorid 自定义popupwindow菜单

    本篇文章将深入探讨如何在Android中自定义`PopupWindow`来实现类似菜单的功能。 首先,我们需要了解`PopupWindow`的基本用法。`PopupWindow`是Android SDK提供的一个类,用于创建一个可浮动的窗口。要创建一个`...

    自定义PopupWindow,实现spinner下拉选择列表

    在自定义Spinner时,我们将利用PopupWindow来展示下拉选项列表。 步骤一:创建PopupWindow 1. 在Java代码中实例化PopupWindow对象,传入一个布局资源ID作为内容视图。 ```java PopupWindow popupWindow = new ...

    Android高级应用源码-PopupWindow模仿UC底部Menu.zip

    可以通过自定义动画来添加弹出和消失的动画效果,例如使用`Animation`类或者`ObjectAnimator`。 7. **模仿UC底部Menu** UC浏览器底部菜单通常包含多个选项,每个选项对应一个按钮。在本项目中,我们可能会创建一...

    Android应用源码之PopupWindow模仿UC底部Menu-IT计算机-毕业设计.zip

    在这个"Android应用源码之PopupWindow模仿UC底部Menu"的项目中,我们将深入探讨如何利用PopupWindow来模仿UC浏览器底部的菜单设计,这对于理解和掌握Android UI设计以及自定义视图具有很大的帮助。 首先,...

    Andorid例子源码popupWindow自定义键盘控件

    本示例源码着重于如何使用PopupWindow来创建一个自定义的键盘控件。这种键盘通常用于替代系统默认的软键盘,尤其在输入限制较多或需要特殊交互的情况下更为适用。 首先,我们需要理解PopupWindow的基本用法。...

    PopupWindow模仿UC底部Menu

    在本项目中,我们将利用 `PopupWindow` 模仿UC浏览器底部的菜单设计,提供一种在用户界面上动态展示选项的方式。 `PopupWindow` 的主要优点是它可以灵活地定位在屏幕的任意位置,并且可以自定义其大小和内容。创建 ...

    android自定义menu

    在Android开发中,自定义`Menu`是一种常见的需求,它允许开发者根据应用的特性提供更加个性化的操作选项。本文将深入探讨如何在Android中实现自定义`Menu`,结合源码解析以及工具的使用,帮助你更好地理解这一过程。...

    Android应用源码之PopupWindow模仿UC底部Menu.zip

    本项目“Android应用源码之PopupWindow模仿UC底部Menu”是针对这一功能的一个实例,它展示了如何利用PopupWindow实现类似UC浏览器底部菜单的效果,这对于增强用户界面的交互性和用户体验有着重要作用。 首先,...

    自定义popupWindow

    有时候我们需要PopupWindow在特定位置显示,可以通过计算锚点位置和PopupWindow大小来确定显示位置。 三、注意事项 1. 记得在PopupWindow使用完后调用`dismiss()`,防止内存泄漏。 2. 若PopupWindow需要跟随...

    使用PopupWindow自定义弹窗

    本篇文章将深入探讨如何使用`PopupWindow`来自定义弹窗,结合自定义View来实现更加灵活和丰富的功能。 首先,`PopupWindow`的基本用法包括设置内容视图、大小以及显示位置。以下是一个简单的创建`PopupWindow`的...

Global site tag (gtag.js) - Google Analytics