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

  1. public class CustomActionProvider extends ActionProvider implements
  2. OnMenuItemClickListener, OnClickListener, OnTouchListener, OnKeyListener {
  3.  
  4. private final Context context;// 上下文
  5. private View actionView;//action view
  6.  
  7. private PopupWindow mPopupWindow;//popup window 里有个view,view显示的像个menu
  8. private View mMenu; //popup window 里的显示控件
  9.  
  10. private void initPopupMenu(){
  11.  
  12. LayoutInflater lif = LayoutInflater.from(context);
  13.  
  14. mMenu = lif.inflate(R.layout.custom_popup_window, null);
  15. //不用setBackgroundDrawable的时候必须加这句才能back键和menu键退出
  16. mMenu.setFocusableInTouchMode(true);
  17. mMenu.setOnKeyListener(this);
  18. mMenu.setOnTouchListener(this);
  19.  
  20. mPopupWindow = new PopupWindow(mMenu,
  21. WindowManager.LayoutParams.WRAP_CONTENT,
  22. WindowManager.LayoutParams.WRAP_CONTENT);
  23. /*
  24. * setBackgroundDrawable很重要,没有这个函数 back键和menu键关闭popwindow 很麻烦,
  25. * 有了它以后,就不用为popwindow内的控件分别设置setOnKeyListener和setOnTouchListener了
  26. * 可以同时支持back返回和点popwindow外面关闭popwindow,
  27. */
  28. // mPopupWindow.setBackgroundDrawable(new ColorDrawable(-00000));
  29. mPopupWindow.setFocusable(true);
  30. mPopupWindow.setOutsideTouchable(true);
  31. mPopupWindow.setAnimationStyle(R.anim.popwindow_anim);
  32. mMenu.findViewById(R.id.btn1_popup_window).setOnClickListener(this);
  33. mMenu.findViewById(R.id.btn2_popup_window).setOnClickListener(this);
  34. mMenu.findViewById(R.id.btn3_popup_window).setOnClickListener(this);
  35. mMenu.findViewById(R.id.btn4_popup_window).setOnClickListener(this);
  36. mMenu.findViewById(R.id.btnClose_popup_window).setOnClickListener(this);
  37. }
  38. //...
  39. @Override
  40. public void onClick(View v) {
  41. // TODO Auto-generated method stub
  42. switch (v.getId()) {
  43. case R.id.btn_action_view_for_costomProvider: {
  44. mPopupWindow.showAsDropDown(v,-20,10);
  45. }
  46. return;
  47. case R.id.btn4_popup_window:
  48. case R.id.btn3_popup_window:
  49. case R.id.btn2_popup_window:
  50. case R.id.btn1_popup_window:
  51. Toast.makeText(context, "popup window item clicked",
  52. Toast.LENGTH_SHORT).show();
  53. break;
  54. case R.id.btnClose_popup_window:
  55. break;
  56. }
  57. mPopupWindow.dismiss();
  58.  
  59. }
  60. @Override
  61. public boolean onKey(View v, int keyCode, KeyEvent event) {
  62. // TODO Auto-generated method stub
  63. switch (keyCode) {
  64. case KeyEvent.KEYCODE_BACK:
  65. case KeyEvent.KEYCODE_MENU:
  66. if (mPopupWindow != null && mPopupWindow.isShowing()) {
  67. mPopupWindow.dismiss();
  68. }
  69. break;
  70. }
  71. return true;
  72. }
  73. @Override
  74. public boolean onTouch(View v, MotionEvent event) {
  75. // TODO Auto-generated method stub
  76. mPopupWindow.dismiss();
  77. return false;
  78. }
  79. }

PopupWindow(2)简单示例-自定义弹出菜单的更多相关文章

  1. 用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)

         用PopupWindow实现弹出菜单是一个比较好的方式.当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐. 这个实例的效果是这样的:点击按钮后,一个菜 ...

  2. Android 使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  3. Android开发技巧——使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  4. 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...

  5. 读《深入理解Windows Phone 8.1 UI控件编程》1.4.3 框架的应用示例:自定义弹出窗口有感

    前些天买了园子里林政老师的两本 WP8.1 的书籍.毕竟想要学得深入的话,还是得弄本书跟着前辈走的. 今天读到 1.4.3 节——框架的应用示例:自定义弹出窗口这一小节.总的来说,就是弄一个像 Mes ...

  6. DIV+CSS制作二级横向弹出菜单,略简单

    没有使用JavaScript控制二级菜单的显示,结果如上图所示. 代码如下: <!DOCTYPE html> <html> <head> <meta char ...

  7. WPF自定义Popup和弹出菜单

    Popup: <StackPanel Grid.Column="0" Grid.Row="6" Orientation="Horizontal& ...

  8. 向上弹出菜单jQuery插件

    插件名:柯乐义英文名:Keleyijs文件名称:jquery.keleyi.js插件功能:该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单. 示例查看:http://keleyi.com/kel ...

  9. win32进阶之路:程序托盘图标+右键弹出菜单

     开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...

随机推荐

  1. Codeforces Round #422 (Div. 2) A. I'm bored with life 暴力

    A. I'm bored with life     Holidays have finished. Thanks to the help of the hacker Leha, Noora mana ...

  2. using the flume-ng-sql-source plugin to push data from Mysql DB to Spark

    org.apache.flume.EventDeliveryException while running flume and sending data to spark · Issue #21 · ...

  3. C++设计模式之State模式

    这里有两个例子: 1.https://www.cnblogs.com/wanggary/archive/2011/04/21/2024117.html 2.https://www.cnblogs.co ...

  4. 百度dureos CMake Error

    CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, ...

  5. 用Delphi7 调用.NET 2.0的WebService 所要注意的问题(Document格式和UTF8编码)

    Delphi7 调用VS.NET 2005开发的基于.NET 2.0的WebService时发生了错误.查阅资料 http://www.community.borland.com/article/bo ...

  6. 用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具

    用 nodejs 写一个命令行工具 :创建 react 组件的命令行工具 前言 上周,同事抱怨说 react 怎么不能像 angular 那样,使用命令行工具来生成一个组件.对呀,平时工作时,想要创建 ...

  7. java停止线程

    本文将介绍jdk提供的api中停止线程的用法. 停止一个线程意味着在一个线程执行完任务之前放弃当前的操作,停止一个线程可以使用Thread.stop()方法,但是做好不要使用它,它是后继jdk版本中废 ...

  8. 「NOI2004」「LuoguP1486」郁闷的出纳员

    Descrption OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调 ...

  9. bzoj2431逆序对数列——递推

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2431 考虑新加入一个数i,根据放的位置不同,可以产生0~i-1个新逆序对: 所以f[i][j ...

  10. sublime text 3中修改tab键为缩进4个空格

    1. 菜单栏里点击 Preferences-> Setting-User, 如图 2. 在弹出来的文本里,添加如下两行: { // 注意只有一个大括号,如果之前有属性,如在之前的属性后确保有 , ...