1
+ package com .noober .menu .group ;
2
+
3
+ import android .content .Context ;
4
+ import android .graphics .Color ;
5
+ import android .util .TypedValue ;
6
+ import android .view .Gravity ;
7
+ import android .view .View ;
8
+ import android .view .ViewGroup ;
9
+ import android .widget .GridLayout ;
10
+ import android .widget .LinearLayout ;
11
+ import android .widget .PopupWindow ;
12
+ import android .widget .TextView ;
13
+
14
+ import java .util .ArrayList ;
15
+ import java .util .HashMap ;
16
+ import java .util .List ;
17
+ import java .util .Map ;
18
+
19
+ public class GroupedFloatMenu extends PopupWindow {
20
+
21
+ private Context context ;
22
+ private List <MenuGroup > menuGroups ;
23
+
24
+ public GroupedFloatMenu (Context context , List <MenuGroup > menuGroups ) {
25
+ super (context );
26
+ this .context = context ;
27
+ this .menuGroups = menuGroups ;
28
+ init ();
29
+ }
30
+
31
+ private void init () {
32
+ LinearLayout mainLayout = new LinearLayout (context );
33
+ mainLayout .setOrientation (LinearLayout .VERTICAL );
34
+ mainLayout .setPadding (20 , 20 , 20 , 20 );
35
+
36
+ for (MenuGroup group : menuGroups ) {
37
+ // 添加组名
38
+ TextView groupNameView = new TextView (context );
39
+ groupNameView .setText (group .getGroupName ());
40
+ groupNameView .setTextSize (TypedValue .COMPLEX_UNIT_SP , 16 );
41
+ groupNameView .setTextColor (Color .BLACK );
42
+ groupNameView .setPadding (0 , 10 , 0 , 10 );
43
+ mainLayout .addView (groupNameView );
44
+
45
+ // 添加 GridLayout
46
+ GridLayout gridLayout = new GridLayout (context );
47
+ gridLayout .setColumnCount (3 ); // 每行显示3个菜单项
48
+ gridLayout .setRowCount ((int ) Math .ceil (group .getItems ().size () / 3.0 ));
49
+
50
+ for (MenuItem menuItem : group .getItems ()) {
51
+ TextView itemTextView = new TextView (context );
52
+ itemTextView .setText (menuItem .getItem ());
53
+ itemTextView .setGravity (Gravity .CENTER );
54
+ itemTextView .setPadding (10 , 10 , 10 , 10 );
55
+ itemTextView .setBackgroundResource (android .R .drawable .btn_default );
56
+ itemTextView .setOnClickListener (menuItem .getOnClickListener ());
57
+
58
+ GridLayout .LayoutParams params = new GridLayout .LayoutParams ();
59
+ params .width = 0 ;
60
+ params .height = ViewGroup .LayoutParams .WRAP_CONTENT ;
61
+ params .columnSpec = GridLayout .spec (GridLayout .UNDEFINED , 1f );
62
+ params .setMargins (5 , 5 , 5 , 5 );
63
+ itemTextView .setLayoutParams (params );
64
+
65
+ gridLayout .addView (itemTextView );
66
+ }
67
+
68
+ mainLayout .addView (gridLayout );
69
+ }
70
+
71
+ setContentView (mainLayout );
72
+ setWidth (ViewGroup .LayoutParams .WRAP_CONTENT );
73
+ setHeight (ViewGroup .LayoutParams .WRAP_CONTENT );
74
+ setFocusable (true );
75
+ setBackgroundDrawable (null );
76
+ }
77
+
78
+ public static class MenuGroup {
79
+ private String groupName ;
80
+ private List <MenuItem > items ;
81
+
82
+ public MenuGroup (String groupName , List <MenuItem > items ) {
83
+ this .groupName = groupName ;
84
+ this .items = items ;
85
+ }
86
+
87
+ public String getGroupName () {
88
+ return groupName ;
89
+ }
90
+
91
+ public List <MenuItem > getItems () {
92
+ return items ;
93
+ }
94
+ }
95
+
96
+ public static class MenuItem {
97
+ private String item ;
98
+ private View .OnClickListener onClickListener ;
99
+
100
+ public MenuItem (String item , View .OnClickListener onClickListener ) {
101
+ this .item = item ;
102
+ this .onClickListener = onClickListener ;
103
+ }
104
+
105
+ public String getItem () {
106
+ return item ;
107
+ }
108
+
109
+ public View .OnClickListener getOnClickListener () {
110
+ return onClickListener ;
111
+ }
112
+ }
113
+ }
0 commit comments