zoukankan      html  css  js  c++  java
  • 创建弹出菜单

    1.ActionBar中的菜单:http://www.tuicool.com/articles/VrUBRf

    2.ContextMenu(上下文菜单)

    • 首先在res/menu/中创建一个XML文件,以定义菜单,我们将其命名为options
      <?xml version="1.0" encoding="utf-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
      
          <item
              android:id="@+id/add_item"
              android:title="Add Item"
              android:icon="@drawable/ic_launcher"
              android:showAsAction="ifRoom"
              tools:ignore="AppCompatResource"
              />
          <item
              android:id="@+id/remove_item"
              android:title="remove Item"
              android:icon="@drawable/ic_launcher"
              android:showAsAction="always"
              tools:ignore="AppCompatResource"
              />
          <item
              android:id="@+id/menu_edit"
              android:title="edit Item"
              android:icon="@drawable/ic_launcher"
              android:showAsAction="never"
              tools:ignore="AppCompatResource"
              />
      </menu>
    • 然后再Activity中用onCreatContextMenu()和onContextItemSelected()方法填充菜单,处理用户的选择
    •  1 @Override
       2     public boolean onContextItemSelected(MenuItem item) {
       3         switch(item.getItemId()){
       4             case R.id.add_item:
       5                 //执行添加动作
       6                 break;
       7             case R.id.remove_item:
       8                 //执行删除动作
       9                 break;
      10             case R.id.menu_edit:
      11                 break;
      12             default:
      13                 return super.onContextItemSelected(item);
      14         }
      15         return true;
      16     }
      17 
      18 
      19     @Override
      20     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
      21         menu.setHeaderTitle("Choose an option");
      22         getMenuInflater().inflate(R.menu.options,menu);
      23         super.onCreateContextMenu(menu, v, menuInfo);
      24 
      25     }
    • 默认是用户长按item时会触发菜单项,进而弹出选项框
    • 使用时要使用registerForContextMenu(View view)来注册菜单,即将ContextMenu绑定到某个view中
    • 示例:
       1 package com.example.qjm3662.service_learn;
       2 
       3 import android.content.ComponentName;
       4 import android.content.Intent;
       5 import android.content.ServiceConnection;
       6 import android.os.IBinder;
       7 import android.support.v7.app.AppCompatActivity;
       8 import android.os.Bundle;
       9 import android.view.ContextMenu;
      10 import android.view.Menu;
      11 import android.view.MenuItem;
      12 import android.view.View;
      13 import android.view.Window;
      14 import android.widget.ArrayAdapter;
      15 import android.widget.ListView;
      16 import android.widget.TimePicker;
      17 import android.widget.Toast;
      18 
      19 public class MainActivity extends AppCompatActivity {
      20 
      21     private static final String[] ITEMS = {"Lost","Time","Will","Never","Be","Find","again!"};
      22     @Override
      23     protected void onCreate(Bundle savedInstanceState) {
      24         super.onCreate(savedInstanceState);
      25         ListView list = new ListView(this);
      26         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ITEMS);
      27         list.setAdapter(adapter);
      28         registerForContextMenu(list);
      29         setContentView(list);
      30     }
      31 
      32 
      33 
      34 
      35     @Override
      36     public boolean onContextItemSelected(MenuItem item) {
      37         switch(item.getItemId()){
      38             case R.id.add_item:
      39                 //执行添加动作
      40                 break;
      41             case R.id.remove_item:
      42                 //执行删除动作
      43                 break;
      44             case R.id.menu_edit:
      45                 break;
      46             default:
      47                 return super.onContextItemSelected(item);
      48         }
      49         return true;
      50     }
      51 
      52 
      53     @Override
      54     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
      55         menu.setHeaderTitle("Choose an option");
      56         getMenuInflater().inflate(R.menu.options,menu);
      57         super.onCreateContextMenu(menu, v, menuInfo);
      58 
      59     }
      60 
      61 
      62    
      63 }

    3.ActionMode

      激活ActionMode后会在系统的ActionBar上出现一个自定义的菜单,覆盖在原ActionBar上,并出现一个额外的可以退出ActionMode的选项。还允许同时选择多个条目来执行同一个动作。

     1 package com.example.qjm3662.service_learn;
     2 
     3 import android.support.v7.app.AppCompatActivity;
     4 import android.os.Bundle;
     5 import android.view.ActionMode;
     6 import android.view.Menu;
     7 import android.view.MenuItem;
     8 import android.view.View;
     9 import android.widget.AbsListView;
    10 import android.widget.AdapterView;
    11 import android.widget.ArrayAdapter;
    12 import android.widget.ListView;
    13 
    14 public class MainActivity extends AppCompatActivity implements AbsListView.MultiChoiceModeListener{
    15 
    16     ListView list;
    17     private static final String[] ITEMS = {"Lost","Time","Will","Never","Be","Find","again!"};
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         list = new ListView(this);
    22         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ITEMS);
    23         list.setAdapter(adapter);
    24         list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    25         list.setMultiChoiceModeListener(this);
    26         setContentView(list);
    27     }
    28 
    29 
    30     @Override
    31     //当子控件的选择状态发生改变时调用该方法
    32     public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
    33         //获得list中被选中的item数目
    34         int count = list.getCheckedItemCount();
    35         mode.setTitle(String.format("%d Selected", count));
    36     }
    37 
    38     @Override
    39     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    40         getMenuInflater().inflate(R.menu.options,menu);
    41         return true;
    42     }
    43 
    44     @Override
    45     public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    46         //如果ActionMode一直是无效,可以在这里做些工作来更新菜单
    47         return true;
    48     }
    49 
    50     @Override
    51     public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    52         //通过条目的Id得到用户的选择动作
    53         switch (item.getItemId()){
    54             case R.id.add_item:
    55                 //执行添加动作
    56                 break;
    57             case R.id.remove_item:
    58                 //执行删除动作
    59                 break;
    60             case R.id.menu_edit:
    61                 break;
    62             default:
    63                 return false;
    64         }
    65         return true;
    66     }
    67 
    68     @Override
    69     public void onDestroyActionMode(ActionMode mode) {
    70         //退出ActionMode时会调用该方法
    71     }
    72 }

  • 相关阅读:
    vscode Git提交
    安装 nrm
    vue+element ui项目总结点(六)table编辑当前行、删除当前行、新增、合计操作
    Filebrowser安装教程
    vue数据处理:把数组处理成适用于tree组件的数据
    WC2016模拟Divisor
    对拍模板
    题解(5031. 【NOI2017模拟3.27】B)(数论,组合数学)
    Codeforces #657 Div2C choosing flowers
    关于一个大菜鸡的记录
  • 原文地址:https://www.cnblogs.com/qjm253/p/5424665.html
Copyright © 2011-2022 走看看