首页 > 代码库 > Android - 菜单

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                 <item14                     android:id="@+id/menu_2_1"15                     android:icon="@drawable/ic_launcher"16                     android:title="二号一号">17                      <menu>18                         <item19                             android:id="@+id/menu_2_2_1"20                             android:icon="@drawable/ic_launcher"21                             android:title="一号">22                         </item>23                         <item24                             android:id="@+id/menu_2_2_2"25                             android:title="二号">26                         </item>27                         <item28                             android:id="@+id/menu_2_2_3"29                             android:title="三号">30                         </item>31                     </menu>32                 </item>33                 <item34                     android:id="@+id/menu_2_2"35                     android:title="二号">36                 </item>37                 <item38                     android:id="@+id/menu_2_3"39                     android:title="三号">40                 </item>41             </menu>42         </item>43         <item44             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     @Override115     public boolean onOptionsItemSelected(MenuItem item) {116         // TODO Auto-generated method stub117         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 - 菜单