我找了好久没发现怎么给系统自带的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菜单。 首先,我们需要了解`PopupWindow`的基本用法。`PopupWindow`类提供了创建和管理浮动窗口的功能。它可以在任意视图上方显示,可以设置大小...
在创建`PopupWindow`之后,我们可以通过`showAsDropDown()`或`showAtLocation()`方法来显示它。前者用于在某个控件下方显示,后者则允许指定具体的坐标。 接下来,我们讨论如何实现自定义的`Menu`。通常,我们会...
封装`PopupWindow`的第一步是创建一个自定义的类,继承自`PopupWindow`。在这个类中,我们可以添加一些通用的方法,例如设置宽高、内容视图、背景颜色等。下面是一个基础的实现: ```java public class ...
本知识点将深入讲解如何利用`PopupWindow`来实现一个自定义的下拉框。 首先,`PopupWindow`的核心在于它的灵活性。它允许开发者在任意位置显示一个可定制的视图,而且可以设置大小、背景、动画效果等。创建`...
下面我们将按照以下步骤来实现一个自定义的下拉框: 1. **创建布局文件**: - 首先,我们需要为下拉框创建一个布局文件,例如`popup_window.xml`。这个布局将包含下拉框中的所有元素,比如ListView或RecyclerView...
这个压缩包“安卓popupwindow相关-自定义的PopupWindow的类.rar”包含了一些自定义PopupWindow的示例代码,虽然不能确保所有代码都能直接运行,但它们可以作为学习和参考的资源。 首先,让我们了解PopupWindow的...
本资源“安卓popupwindow相关-PopupWindow模仿UC底部Menu.rar”旨在帮助开发者了解如何使用PopupWindow来创建类似UC浏览器底部菜单的效果。 首先,我们来详细了解一下PopupWindow的基本概念。PopupWindow是Android ...
这可以通过设置PopupWindow的背景资源,或者自定义布局中的样式来实现。 2. **动画效果**:为了增加用户交互体验,可以为PopupWindow添加入场和退场动画。使用`Animation`类或者`ObjectAnimator`可以轻松实现。 3....
PopupWindow是Android开发中...在项目中,可以利用PopupWindow实现如菜单、提示信息、表单填写等多种功能,提升用户体验。这个“popupWindow自定义”的项目就是一个很好的起点,帮助开发者掌握并熟练运用PopupWindow。
这个压缩包“安卓Android源码——PopupWindow模仿UC底部Menu.rar”显然是一个示例项目,它展示了如何利用`PopupWindow` 来创建一个与UC浏览器底部菜单类似的用户界面。下面我们将深入探讨`PopupWindow` 的工作原理...
本篇文章将深入探讨如何在Android中自定义`PopupWindow`来实现类似菜单的功能。 首先,我们需要了解`PopupWindow`的基本用法。`PopupWindow`是Android SDK提供的一个类,用于创建一个可浮动的窗口。要创建一个`...
在自定义Spinner时,我们将利用PopupWindow来展示下拉选项列表。 步骤一:创建PopupWindow 1. 在Java代码中实例化PopupWindow对象,传入一个布局资源ID作为内容视图。 ```java PopupWindow popupWindow = new ...
可以通过自定义动画来添加弹出和消失的动画效果,例如使用`Animation`类或者`ObjectAnimator`。 7. **模仿UC底部Menu** UC浏览器底部菜单通常包含多个选项,每个选项对应一个按钮。在本项目中,我们可能会创建一...
在这个"Android应用源码之PopupWindow模仿UC底部Menu"的项目中,我们将深入探讨如何利用PopupWindow来模仿UC浏览器底部的菜单设计,这对于理解和掌握Android UI设计以及自定义视图具有很大的帮助。 首先,...
本示例源码着重于如何使用PopupWindow来创建一个自定义的键盘控件。这种键盘通常用于替代系统默认的软键盘,尤其在输入限制较多或需要特殊交互的情况下更为适用。 首先,我们需要理解PopupWindow的基本用法。...
在本项目中,我们将利用 `PopupWindow` 模仿UC浏览器底部的菜单设计,提供一种在用户界面上动态展示选项的方式。 `PopupWindow` 的主要优点是它可以灵活地定位在屏幕的任意位置,并且可以自定义其大小和内容。创建 ...
在Android开发中,自定义`Menu`是一种常见的需求,它允许开发者根据应用的特性提供更加个性化的操作选项。本文将深入探讨如何在Android中实现自定义`Menu`,结合源码解析以及工具的使用,帮助你更好地理解这一过程。...
本项目“Android应用源码之PopupWindow模仿UC底部Menu”是针对这一功能的一个实例,它展示了如何利用PopupWindow实现类似UC浏览器底部菜单的效果,这对于增强用户界面的交互性和用户体验有着重要作用。 首先,...
有时候我们需要PopupWindow在特定位置显示,可以通过计算锚点位置和PopupWindow大小来确定显示位置。 三、注意事项 1. 记得在PopupWindow使用完后调用`dismiss()`,防止内存泄漏。 2. 若PopupWindow需要跟随...
本篇文章将深入探讨如何使用`PopupWindow`来自定义弹窗,结合自定义View来实现更加灵活和丰富的功能。 首先,`PopupWindow`的基本用法包括设置内容视图、大小以及显示位置。以下是一个简单的创建`PopupWindow`的...