本示例,用 popupWindow 自定义弹出菜单

public class CustomActionProvider extends ActionProvider implements
OnMenuItemClickListener, OnClickListener, OnTouchListener, OnKeyListener { private final Context context;// 上下文
private View actionView;//action view private PopupWindow mPopupWindow;//popup window 里有个view,view显示的像个menu
private View mMenu; //popup window 里的显示控件 private void initPopupMenu(){ LayoutInflater lif = LayoutInflater.from(context); mMenu = lif.inflate(R.layout.custom_popup_window, null);
//不用setBackgroundDrawable的时候必须加这句才能back键和menu键退出
mMenu.setFocusableInTouchMode(true);
mMenu.setOnKeyListener(this);
mMenu.setOnTouchListener(this); mPopupWindow = new PopupWindow(mMenu,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
/*
* setBackgroundDrawable很重要,没有这个函数 back键和menu键关闭popwindow 很麻烦,
* 有了它以后,就不用为popwindow内的控件分别设置setOnKeyListener和setOnTouchListener了
* 可以同时支持back返回和点popwindow外面关闭popwindow,
*/
// mPopupWindow.setBackgroundDrawable(new ColorDrawable(-00000));
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setAnimationStyle(R.anim.popwindow_anim);
mMenu.findViewById(R.id.btn1_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn2_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn3_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btn4_popup_window).setOnClickListener(this);
mMenu.findViewById(R.id.btnClose_popup_window).setOnClickListener(this);
}
//...
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_action_view_for_costomProvider: {
mPopupWindow.showAsDropDown(v,-20,10);
}
return;
case R.id.btn4_popup_window:
case R.id.btn3_popup_window:
case R.id.btn2_popup_window:
case R.id.btn1_popup_window:
Toast.makeText(context, "popup window item clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.btnClose_popup_window:
break;
}
mPopupWindow.dismiss(); }
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_MENU:
if (mPopupWindow != null && mPopupWindow.isShowing()) {
mPopupWindow.dismiss();
}
break;
}
return true;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
mPopupWindow.dismiss();
return false;
}
}

最新文章

  1. JS 之性能优化(1)
  2. mysql 高级查询
  3. 有关UIView、subview的几个基础知识点-IOS开发 (实例)
  4. Failed to create java virtue machine(不能创建java虚拟机)
  5. Lua 笔记
  6. 点击显示子菜单,离开隐藏子菜单(onmouseout下包含a标签的js解决方法)
  7. hbase ganglia监控配置
  8. CTF比赛中SQL注入的一些经验总结
  9. springMVC+Hibernate4+spring整合实例二(实例代码部分)
  10. django restframework 环境配置
  11. 象棋start
  12. test case VS test scenario
  13. C++.Linux下redis编程:error while loading shared libraries: libhiredis.so.0.13
  14. 机房收费系统——UML用例图
  15. C#(Winform)中button的Enable=false和visible的区别
  16. Android自带语音播报+讯飞语音播报封装(直接用)
  17. iOS 9应用开发教程之iOS 9新特性
  18. Java-API:java.util.regex.Pattern
  19. python(时间模块,序列化模块等)
  20. Boost Python学习笔记(五)

热门文章

  1. VS2005断点失效的问题
  2. (白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)
  3. REST RPC HTTP vs 高性能二进制协议 序列化和通信协议
  4. BZOJ2327: [HNOI2011]勾股定理
  5. VS1053 datasheet 解读笔记
  6. Safair css hack
  7. jsp 中 jstl c:if等标签失效问题
  8. spring boot 使用Ehcache
  9. 织梦dedecms中修改标题与简略标题长度的方法
  10. 使用 Word 2013 维护博客