• 安卓菜单的实现,各种添加菜单的方法。


    (一)选项菜单

    1、简单的创建菜单:

    复制代码
     1 @Override
     2     public boolean onCreateOptionsMenu(Menu menu) {
     3         super.onCreateOptionsMenu(menu);
     4 
     5         // 添加菜单
     6         menu.add("菜单选项1");
     7         /*
     8          * pram1:组号 pram2:唯一的ID号 pram3:排序号 pram4:标题
     9          */
    10         menu.add(1, Menu.FIRST, Menu.FIRST, "菜单选项2");
    11 
    12         // 希望显示菜单就返回true
    13         return true;
    14     }
    复制代码

    2、菜单的分组以及简单属性:

    复制代码
     1 @Override
     2     public boolean onCreateOptionsMenu(Menu menu) {
     3         super.onCreateOptionsMenu(menu);
     4 
     5         int group1 = 1;
     6         int group2 = 2;
     7         menu.add(group1, 1, 1, "item1");
     8         menu.add(group1, 2, 2, "item2");
     9         menu.add(group2, 3, 3, "item3");
    10         menu.add(group2, 4, 4, "item4");
    11 
    12         // menu.removeGroup(group1);//删除一个组
    13         // menu.setGroupVisible(group1, false);//设置可见性
    14         // menu.setGroupEnabled(group2, false);//设置是否可点
    15         // menu.setGroupCheckable(group2, true, t);//设置一组菜单的勾选情况
    16         return true;
    17     }
    复制代码

    3、响应菜单

    一、通过onOptionsItemSelected方法

    复制代码
     1 @Override
     2     public boolean onOptionsItemSelected(MenuItem item) {
     3         // 响应每个菜单项(通过菜单项的ID)
     4         switch (item.getItemId()) {
     5         case 1:
     6             // do something here
     7             break;
     8         case 2:
     9             // do something here
    10             break;
    11         case 3:
    12             // do something here
    13             break;
    14         case 4:
    15             Toast.makeText(this, "hello", 0).show();
    16             break;
    17         default:
    18             // 对没有处理的事件,交给父类来处理
    19             return super.onOptionsItemSelected(item);
    20         }
    21          //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
    22         return true;
    23     }
    复制代码

    二、通过监听

    复制代码
     1 //第一步:创建监听器类
     2 class MyMenuItemClickListener implements OnMenuItemClickListener {
     3     @Override
     4     publicboolean onMenuItemClick(MenuItem item) {
     5         // do something here...
     6         return   true;    //finish handling
     7     }
     8 }
     9 //第二步:为菜单项注册监听器
    10 menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
    复制代码

     三、通过Intent

    (二)子菜单subMenu

    注意:Menu可以包含多个SubMenu及menuItem,SubMenu可以包含多个MenuItem,,但是SubMenu不能包含SubMenu。

    复制代码
     1 @Override
     2     public boolean onCreateOptionsMenu(Menu menu) {
     3         //一个menu中可以添加多个子菜单
     4         SubMenu subMenu=menu.addSubMenu(1,1, 0, "子菜单");
     5         
     6         //在子菜单中添加多个菜单选项
     7         MenuItem menuItem1=subMenu.add(1, 1, 0, "菜单选项1");
     8         subMenu.add(1, 2, 1,"菜单选项2");
     9         subMenu.add(1, 3, 2,"菜单选项3");
    10         subMenu.add(1, 4, 3,"菜单选项4");
    11         
    12         //子菜单不支持显示图标,尽管这样设置不会报错
    13         subMenu.setIcon(R.drawable.ic_launcher);
    14         
    15         //设置菜单选项的图标
    16         menuItem1.setIcon(R.drawable.ic_launcher);
    17         return true;
    18     }
    复制代码

    (三)上下文菜单ContextMenu

    复制代码
     1 package com.zzw.contextMenu;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.util.Log;
     6 import android.view.ContextMenu;
     7 import android.view.ContextMenu.ContextMenuInfo;
     8 import android.view.MenuItem;
     9 import android.view.View;
    10 import android.widget.ArrayAdapter;
    11 import android.widget.ListView;
    12 import android.widget.Toast;
    13 
    14 public class MainActivity extends Activity {
    15     private static final String TAG = "MainActivity";
    16     ListView listView;
    17 
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         Log.d(TAG, "onCreate");
    21 
    22         super.onCreate(savedInstanceState);
    23         setContentView(R.layout.activity_main);
    24         listView = (ListView) findViewById(R.id.listView);
    25 
    26         simpleShowList();
    27         //1.在activity的onCreate方法中为一个view注册上下文菜单
    28         this.registerForContextMenu(listView);
    29 
    30     }
    31     
    32     //2.在onCreateContextMenu中生成上下文菜单。
    33     @Override
    34     public void onCreateContextMenu(ContextMenu menu, View v,
    35             ContextMenuInfo menuInfo) {
    36         Log.d(TAG, "onCreateContextMenu_start");
    37 
    38         menu.setHeaderTitle("上下文菜单标题");
    39         menu.add(0, 1, 0, "选项1");
    40         menu.add(0, 2, 0, "选项2");
    41         menu.add(0, 3, 0, "选项3");
    42         
    43         Log.d(TAG, "onCreateContextMenu_stop");
    44     }
    45     
    46     //3.在onContextItemSelected中响应上下文菜单项。
    47     @Override
    48     public boolean onContextItemSelected(MenuItem item) {
    49         Log.d(TAG, "onContextItemSelected_start");
    50         int item_id = item.getItemId();
    51         switch (item_id) {
    52         case 1:
    53             Toast.makeText(this, "我是上下文菜单选项1", 0).show();
    54             break;
    55         case 2:
    56 
    57             break;
    58         case 3:
    59 
    60             break;
    61 
    62         default:
    63             return super.onContextItemSelected(item);
    64         }
    65         Log.d(TAG, "onContextItemSelected_stop");
    66         return true;
    67     }
    68 
    69     private void simpleShowList() {
    70         Log.d(TAG, "simpleShowList_start");
    71         String[] showList = { "显示1", "显示2", "显示3", "显示4" };
    72 
    73         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    74                 android.R.layout.simple_expandable_list_item_1, showList);
    75 
    76         listView.setAdapter(adapter);
    77         Log.d(TAG, "simpleShowList_stop");
    78     }
    79 
    80 }
    复制代码

     

    (四)通过XML文件添加菜单

    1.在res文件下创建menu文件夹,一般默认有的,在里面new出一个Android xml File来编辑自己的菜单

    2.编辑自己的xml

    复制代码
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
     3 
     4     <!-- group是分组 -->
     5     <group android:id="@+id/group1" >
     6 
     7         <!-- item是一个菜单选项 -->
     8         <item
     9             android:id="@+id/item1"
    10             android:title="菜单选项1(子菜单)">
    11             <!-- 在一个item中添加一个menu就是子菜单 -->
    12             <menu>
    13                 <!-- 子菜单中的菜单选项 -->
    14                 <item
    15                      android:icon="@drawable/ic_launcher"
    16                     android:id="@+id/item1_1"
    17                     android:title="子菜单内选项1"/>
    18                 <item
    19                     android:id="@+id/item1_2"
    20                     android:title="子菜单内选项2"/>
    21             </menu>
    22         </item>
    23         <item
    24             android:id="@+id/item2"
    25             android:title="菜单选项2">
    26         </item>
    27     </group>
    28     <group android:id="@+id/group2" >
    29         <item
    30             android:id="@+id/item3"
    31             android:title="菜单选项4">
    32         </item>
    33         <item
    34             android:id="@+id/item4"
    35             android:title="菜单选项5">
    36         </item>
    37     </group>
    38 
    39 </menu>
    复制代码

    3.在activity中获取:

    复制代码
     1 @Override
     2     public boolean onCreateOptionsMenu(Menu menu) {
     3         MenuInflater in = getMenuInflater();
     4         in.inflate(R.menu.main, menu);
     5         return true;
     6     }
     7 
     8     @Override
     9     public boolean onOptionsItemSelected(MenuItem item) {
    10         switch (item.getItemId()) {
    11         case R.id.item1:
    12            13             break;
    14         case R.id.item2:
    15 
    16             break;
    17         
    18         default:
    19             return super.onOptionsItemSelected(item);
    20         }
    21 
    22         return true;
    23     }
    复制代码

    一些基本的属性:

    设置菜单icon

    1 <item 
    2         android:id="@+id/item1"
    3         android:title="菜单选项1"
    4         android:icon="@drawable/ic_launcher"
    5         />

    设置菜单选项的可选,android:checkableBehavior,chencked

    复制代码
     1  <!-- checkableBehavior设置可选 -->
     2     <group android:id="@+id/group1"
     3         android:checkableBehavior="all" >
     4         <!-- checked设置特定菜单项(被勾中) -->
     5         <item
     6             android:id="@+id/item1"
     7             android:title="菜单选项1"
     8             >
     9         </item>
    10         <item
    11             android:id="@+id/item2"
    12             android:checked="true"
    13             android:title="菜单选项2">
    14         </item>
    15     </group>
    复制代码

    设置菜单可用不可用android:enable

    复制代码
     1  <group android:id="@+id/group1">
     2         <item
     3             android:id="@+id/item1"
     4             android:title="菜单选项1"
     5             android:enabled="true"
     6             >
     7         </item>
     8         <item
     9             android:id="@+id/item2"
    10             android:title="菜单选项2"
    11              android:enabled="false">
    12         </item>
    13     </group>
    复制代码

    设置菜单选项是否可见android:visible

    复制代码
     1  <group android:id="@+id/group1">
     2         <item
     3             android:id="@+id/item1"
     4             android:title="菜单选项1"
     5             android:visible="true"
     6             >
     7         </item>
     8         <item
     9             android:id="@+id/item2"
    10             android:title="菜单选项2"
    11              android:visible="false">
    12         </item>
    13     </group>
    14     
    复制代码

  • 相关阅读:
    LR学习笔记6-常用术语
    LR学习笔记5-LR界面分析3
    LR学习笔记4-LR界面分析2
    LR学习笔记3-LR界面分析1
    Maven快速导出maven工程的依赖包
    Python3 将txt数据转换成列表,进行排序,筛选
    iOS OC环信实时语音切换听筒免提听不到声音报错:AVAudioSessionErrorCodeBadParam
    iOS voip电话和sip软电话 --网络电话
    远程(离线)推送自定义推送声音,友盟、极光
    Swift3.0 自定义tableView复用cell 的写法,与CollectionViewCell的不同,数据model
  • 原文地址:https://www.cnblogs.com/labixiaoxin/p/5032951.html
Copyright © 2020-2023  润新知