基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出

时间:2021-10-27 07:03:17

android material design:popupmenu

android material design 引入的popupmenu类似过去的上下文菜单,但是更灵活。 如图所示:

基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出

现在给出实现上图popupmenu的代码。 本例是一个普通的button触发弹出popupmenu。

测试的mainactivity.java :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package zhangphil.materialdesign; 
import android.app.activity;
import android.os.bundle;
import android.support.v.widget.popupmenu;
import android.view.menuitem;
import android.view.view;
import android.widget.button;
import android.widget.toast; 
public class mainactivity extends activity { 
@override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main); 
    final button button = (button) findviewbyid(r.id.button);
    button.setonclicklistener(new view.onclicklistener() { 
     @override
      public void onclick(view v) {
        showpopupmenu(button);
      }
    });
  
  private void showpopupmenu(view view) {
    // view当前popupmenu显示的相对view的位置
    popupmenu popupmenu = new popupmenu(this, view); 
    // menu布局
    popupmenu.getmenuinflater().inflate(r.menu.main, popupmenu.getmenu()); 
    // menu的item点击事件
    popupmenu.setonmenuitemclicklistener(new popupmenu.onmenuitemclicklistener() {
      @override
      public boolean onmenuitemclick(menuitem item) {
        toast.maketext(getapplicationcontext(), item.gettitle(), toast.length_short).show();
        return false;
      }
    }); 
     // popupmenu关闭事件
    popupmenu.setondismisslistener(new popupmenu.ondismisslistener() {
       @override
       public void ondismiss(popupmenu menu) {
         toast.maketext(getapplicationcontext(), "关闭popupmenu", toast.length_short).show();
      }
     });
  
     popupmenu.show();
   }
}
 package zhangphil.materialdesign;
import android.app.activity;
import android.os.bundle;
import android.support.v7.widget.popupmenu;
import android.view.menuitem;
import android.view.view;
import android.widget.button;
import android.widget.toast;
public class mainactivity extends activity {
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 final button button = (button) findviewbyid(r.id.button);
 button.setonclicklistener(new view.onclicklistener() {
  @override
  public void onclick(view v) {
  showpopupmenu(button);
  }
 });
 }
 private void showpopupmenu(view view) {
 // view当前popupmenu显示的相对view的位置
 popupmenu popupmenu = new popupmenu(this, view);
 // menu布局
 popupmenu.getmenuinflater().inflate(r.menu.main, popupmenu.getmenu());
 // menu的item点击事件
 popupmenu.setonmenuitemclicklistener(new popupmenu.onmenuitemclicklistener() {
  @override
  public boolean onmenuitemclick(menuitem item) {
  toast.maketext(getapplicationcontext(), item.gettitle(), toast.length_short).show();
  return false;
  }
 });
 // popupmenu关闭事件
 popupmenu.setondismisslistener(new popupmenu.ondismisslistener() {
  @override
  public void ondismiss(popupmenu menu) {
  toast.maketext(getapplicationcontext(), "关闭popupmenu", toast.length_short).show();
  }
 });
 popupmenu.show();
 }
}

mainactivity.java需要的activity_main布局文件只含一个普通的android button,在次不再赘述。

位于menu目录下的main.xml:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools" >
   <item
     android:id="@+id/action_open"
     android:orderincategory="
     android:title="打开"
     app:showasaction="never"/>
  <item
    android:id="@+id/action_new"
    android:orderincategory="
    android:title="新建"
    app:showasaction="never"/>
  <item
    android:id="@+id/action_del"
    android:orderincategory="
    android:title="删除"
     app:showasaction="never"/>
 </menu>

以上内容给大家分享基于android实现点击某个按钮让菜单选项从按钮周围指定位置弹出的相关知识,希望大家喜欢。