Android - 菜单

一、OptionMenu (选项菜单)

简介:按下menu键时,弹出此菜单,也是最常见的菜单

二、ContextMenu (上下文菜单)

简介:桌面系统中有右键,可移动不行啊,所以就有了长按事件,以代替右键菜单

三、 PopuMenu (弹出式菜单)

简介:顾明思意,就是弹出式菜单了,便于交互

布局如下:

 1 <?xml version="1.0" encoding="utf-8"?>

 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"  >

 3         <item

 4             android:id="@+id/menu_1_1"

 5             android:icon="@drawable/ic_launcher"

 6             android:title="一号" android:visible="true">

 7         </item>

 8         <item

 9             android:id="@+id/menu_1_2"

10             android:icon="@drawable/ic_launcher"

11             android:title="二号">

12             <menu>

13                 <item

14                     android:id="@+id/menu_2_1"

15                     android:icon="@drawable/ic_launcher"

16                     android:title="二号一号">

17                      <menu>

18                         <item

19                             android:id="@+id/menu_2_2_1"

20                             android:icon="@drawable/ic_launcher"

21                             android:title="一号">

22                         </item>

23                         <item

24                             android:id="@+id/menu_2_2_2"

25                             android:title="二号">

26                         </item>

27                         <item

28                             android:id="@+id/menu_2_2_3"

29                             android:title="三号">

30                         </item>

31                     </menu>

32                 </item>

33                 <item

34                     android:id="@+id/menu_2_2"

35                     android:title="二号">

36                 </item>

37                 <item

38                     android:id="@+id/menu_2_3"

39                     android:title="三号">

40                 </item>

41             </menu>

42         </item>

43         <item

44             android:id="@+id/menu_1_3"

45             android:icon="@drawable/ic_launcher"

46             android:title="三号">

47         </item>

48        

49 </menu>
布局代码

 

应用如下:

  1 package lilonghe.example.menudemo;

  2 

  3 import java.io.Console;

  4 import java.lang.reflect.Array;

  5 import java.lang.reflect.Method;

  6 import java.util.ArrayList;

  7 import java.util.List;

  8 

  9 import android.R.array;

 10 import android.app.Activity;

 11 import android.location.Address;

 12 import android.os.Bundle;

 13 import android.util.Log;

 14 import android.view.ContextMenu;

 15 import android.view.Menu;

 16 import android.view.MenuItem;

 17 import android.view.SubMenu;

 18 import android.view.View;

 19 import android.view.ContextMenu.ContextMenuInfo;

 20 import android.widget.ArrayAdapter;

 21 import android.widget.ListView;

 22 import android.widget.PopupMenu;

 23 

 24 public class MainActivity extends Activity {

 25 

 26     private ListView listView;

 27     @Override

 28     protected void onCreate(Bundle savedInstanceState) {

 29         super.onCreate(savedInstanceState);

 30         setContentView(R.layout.activity_main);

 31         listView = (ListView)findViewById(R.id.listView1);

 32         String[] arrayStrings = new String[]{"一号","二号"};

 33         ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,arrayStrings);

 34         listView.setAdapter(adapter);

 35         // 注册“上下文菜单”

 36         registerForContextMenu(listView);

 37     }

 38     

 39     public void showPopuMenu(View v) {

 40         

 41         PopupMenu pmMenu = new PopupMenu(this, v);

 42         pmMenu.getMenuInflater().inflate(R.menu.main_menu, pmMenu.getMenu());

 43         setIconEnable(pmMenu.getMenu(),true);

 44         pmMenu.show();

 45     }

 46     

 47     /**

 48      * 创建上下文菜单

 49      */

 50     @Override

 51     public void onCreateContextMenu(ContextMenu menu, View v,

 52             ContextMenuInfo menuInfo) {

 53         // TODO Auto-generated method stub

 54         super.onCreateContextMenu(menu, v, menuInfo);

 55         setIconEnable(menu,true);

 56         getMenuInflater().inflate(R.menu.main_menu, menu);

 57         menu.setHeaderTitle("this is title");

 58         

 59     }

 60     /**

 61      * 上下文菜单选中

 62      */

 63     @Override

 64     public boolean onContextItemSelected(MenuItem item) {

 65         // 同OptionMenu

 66         return super.onContextItemSelected(item);

 67     }

 68     /**

 69      * 创建选项菜单

 70      */

 71     @Override

 72     public boolean onCreateOptionsMenu(Menu menu) {

 73         setIconEnable(menu, true);

 74         // 第一种:布局文件

 75         //getMenuInflater().inflate(R.menu.main_menu, menu);

 76         // 第二种:动态创建

 77         menu.add(1, 1, 1, "首页");

 78         menu.getItem(0).setIcon(R.drawable.ic_launcher);

 79         menu.add(1, 2, 1, "二页");

 80         menu.getItem(1).setIcon(R.drawable.ic_launcher);

 81         menu.add(1, 3, 1, "三页");

 82         menu.getItem(2).setIcon(R.drawable.ic_launcher);

 83         //二级菜单

 84         SubMenu subMenu = menu.addSubMenu("设置性别");

 85         subMenu.setIcon(R.drawable.ic_launcher);

 86         subMenu.add(2,5,2,"女");

 87         SubMenu s_2 = subMenu.addSubMenu("男");

 88         s_2.setHeaderTitle("真是男的?");

 89         s_2.add(1, 6, 1, "真的是的");

 90         s_2.add(1,7,1,"不告诉你");    

 91         return true;

 92     }

 93     /***

 94      * 此方法解决Android4.0以上不显示图标问题

 95      * @param menu

 96      * @param b

 97      */

 98     private void setIconEnable(Menu menu, boolean b) {

 99         try 

100         {

101             Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");

102             Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);

103             m.setAccessible(true);

104         

105             //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)

106             m.invoke(menu, true);    

107         } catch (Exception e){

108             e.printStackTrace();

109         }

110     }

111     /**

112      * 选项菜单选中

113      */

114     @Override

115     public boolean onOptionsItemSelected(MenuItem item) {

116         // TODO Auto-generated method stub

117         Log.i("ItemId", item.getItemId()+"");

118         Log.i("ItemTitle", item.getTitle().toString());

119         switch(item.getItemId()){

120             case R.id.menu_1_1:

121                 Log.i("switch", "1_1");

122             break;

123             case R.id.menu_1_2:

124                 Log.i("switch", "1_2");

125             break;

126             case R.id.menu_1_3:

127                 Log.i("switch", "1_3");

128             break;

129         }

130         //获取ID: item.getItemId();

131         //获取标题:item.getTitle();

132         return true;

133     }

134 }
应用代码

 

你可能感兴趣的:(android)