zoukankan      html  css  js  c++  java
  • 安卓开发_浅谈ContextMenu(上下文菜单)

    长下文菜单,即长按view显示一个菜单栏

    与OptionMenu的区别
    OptionMenu对应的是activity,一个activity只能拥有一个选项菜单
    ContextMenu对应的是View,每个View都可以设置上下文菜单
    一般情况下ContextMenu常用语ListView或者GridView;

    创建和响应上下文菜单过程:

    1.在activity的onCreate(...)方法中为一个view注册上下文菜单

    2.在onCreateContextMenuInfo(...)中生成上下文菜单。

    3.在onContextItemSelected(...)中响应上下文菜单项。

    有两种方式实现:

    一、java代码动态实现

    1 menu.setHeaderTitle("操作");
    2         menu.setHeaderIcon(R.drawable.icon_72);
    3         
    4         //动态添加上下文菜单
    5          menu.add(1, 100, 1, "复制");
    6          menu.add(1, 101, 1, "粘贴");
    7          menu.add(1, 102, 1, "剪切");

    二、xml文件静态实现

    1 MenuInflater inflater = getMenuInflater(); 
    2         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
    inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
    看这一行代码,
    我们找到其对应的文件

    main.xml文件代码如下:

     1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
     2 
     3     <item
     4         android:id="@+id/action_menu_1"
     5         android:orderInCategory="100"
     6         android:showAsAction="never"
     7         android:title="复制"/>
     8     <item
     9         android:id="@+id/action_menu_2"
    10         android:orderInCategory="100"
    11         android:showAsAction="never"
    12         android:title="粘贴"/>
    13     <item
    14         android:id="@+id/action_menu_3"
    15         android:orderInCategory="100"
    16         android:showAsAction="never"
    17         android:title="剪切"/>
    18 
    19 </menu>

    可以看到两个菜单项,看下菜单项的各个属性:

    1、 android:id=   
    是菜单项id
    2、android:orderInCategory=
    是菜单项优先级,值越大,优先级越多,当菜单项过多时,可隐藏在折叠菜单中
    3、android:showAsAction=

      原来是特定版本用到的,当你的应用程序目标设为蜂巢平台(即 Android 3.0)时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,  对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。 这个属性可接受的值有:

        1.alaways:这个值会使菜单项一直显示在ActionBar上。

        2.ifRoom:如果有足够的空间,这个值会使菜单显示在ActionBar上。

        3.never:这个值菜单永远不会出现在ActionBar是。

        4.withText:这个值使菜单和它的图标,菜单文本一起显示。

    4、android:title=
    是菜单项名字


    1)注册上下文菜单

    1 this.registerForContextMenu(list);

    2)生成上下文菜单

     1 //创建上下文菜单
     2     @Override
     3     public void onCreateContextMenu(ContextMenu menu, View v,
     4             ContextMenuInfo menuInfo) {
     5         // TODO Auto-generated method stub
     6         super.onCreateContextMenu(menu, v, menuInfo);
     7         //设置menu显示的内容
     8         
     9         menu.setHeaderTitle("操作");  //菜单栏标题
    10         menu.setHeaderIcon(R.drawable.icon_72);  //菜单栏图标
    11         
    12         //动态添加上下文菜单
    13 //        menu.add(1, 100, 1, "复制");
    14 //        menu.add(1, 101, 1, "粘贴");
    15 //        menu.add(1, 102, 1, "剪切");
    16         //xml文件静态创建
    17         MenuInflater inflater = getMenuInflater(); 
    18         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
    19     }
    20     

     在onCreateContextMenu()方法中获得点击的列表项

    1 AdapterContextMenuInfo menuInfos = (AdapterContextMenuInfo) menuInfo; 
    2         curItemPosition = menuInfos.position;(curItemPosition 代表点击列表中第几项出现的上下文菜单

    3)响应上下文菜单项

     1 @Override
     2     public boolean onContextItemSelected(MenuItem item) {
     3         // TODO Auto-generated method stub
     4         switch (item.getItemId()) {
     5         case 100:
     6             Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show();
     7             break;
     8         case 101:
     9             Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();
    10             break;
    11         case 102:
    12             Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();
    13             break;
    14 
    15         default:
    16             break;
    17         }
    18         return super.onContextItemSelected(item);
    19 
    20     }

    完整代码:

     1 package information;
     2 
     3 import com.example.allcode.R;
     4 
     5 import android.app.Activity;
     6 import android.os.Bundle;
     7 import android.view.ContextMenu;
     8 import android.view.MenuInflater;
     9 import android.view.MenuItem;
    10 import android.view.View;
    11 import android.view.ContextMenu.ContextMenuInfo;
    12 import android.view.animation.AnimationUtils;
    13 import android.view.animation.LayoutAnimationController;
    14 import android.widget.AdapterView;
    15 import android.widget.AdapterView.OnItemClickListener;
    16 import android.widget.ListView;
    17 import android.widget.Toast;
    18 
    19 public class ContextMenu_List extends Activity{
    20     private ListView list;
    21     @Override
    22     protected void onCreate(Bundle savedInstanceState) {
    23         // TODO Auto-generated method stub
    24         super.onCreate(savedInstanceState);
    25         setContentView(R.layout.donghua_layout);
    26         
    27         
    28         list = (ListView) findViewById(R.id.listView1);
    29         this.registerForContextMenu(list);
    30         //为列表视图中选中的项添加响应事件
    31         list.setOnItemClickListener(new OnItemClickListener() {
    32 
    33             @Override
    34             public void onItemClick(AdapterView<?> parent, View arg1, int pos,
    35                     long id) {
    36                 // TODO Auto-generated method stub
    37                  String result = parent.getItemAtPosition(pos).toString(); //获取选择项的值
    38                     Toast.makeText(ContextMenu_List.this, "点击了 "+result, Toast.LENGTH_SHORT).show();//输出选中项消息
    39             }
    40         });
    41         
    42         
    43     }
    44     //创建上下文菜单
    45     @Override
    46     public void onCreateContextMenu(ContextMenu menu, View v,
    47             ContextMenuInfo menuInfo) {
    48         // TODO Auto-generated method stub
    49         super.onCreateContextMenu(menu, v, menuInfo);
    50         //设置menu显示的内容
    51         
    52         menu.setHeaderTitle("操作");
    53         menu.setHeaderIcon(R.drawable.icon_72);
    54         
    55         //动态添加上下文菜单
    56 //        menu.add(1, 100, 1, "复制");
    57 //        menu.add(1, 101, 1, "粘贴");
    58 //        menu.add(1, 102, 1, "剪切");
    59         //xml文件静态创建
    60         MenuInflater inflater = getMenuInflater(); 
    61         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
    62     }
    63     
    64     @Override
    65     public boolean onContextItemSelected(MenuItem item) {
    66         // TODO Auto-generated method stub
    67         switch (item.getItemId()) {
    68         case 100:
    69             Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show();
    70             break;
    71         case 101:
    72             Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();
    73             break;
    74         case 102:
    75             Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();
    76             break;
    77 
    78         default:
    79             break;
    80         }
    81         return super.onContextItemSelected(item);
    82 
    83     }
    84 
    85 }
    ContextMenu_List.java
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7     <ListView
     8         android:id="@+id/listView1"
     9         android:entries="@array/list"          
    10     
    11         android:layout_width="match_parent"
    12         android:layout_height="wrap_content" >
    13     </ListView>
    14 
    15 </LinearLayout>
    donghua_layout.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3  
     4     <string-array name = "list">   
     5         <item>山东大学</item>
     6         <item>山东科技大学</item>
     7         <item>山东理工大学</item>
     8         <item>山东建筑大学</item>
     9         <item>山东农业大学</item>
    10         <item>济南大学</item>
    11         <item>烟台大学</item>
    12         <item>鲁东大学</item>
    13         <item>临沂大学</item>
    14         <item>聊城大学</item>
    15     </string-array>
    16 </resources>
    arrays.xml

    效果图:

  • 相关阅读:
    mysql内置函数
    phpmyadmin 安装
    java 命令行JDBC连接Mysql
    数据库工具
    java JDBC
    mysql 各种关系代数的使用
    恢复误删的DB table数据
    eclipse php pdt插件安装
    mysql通配符使用
    关系代数和sql语句对应关系
  • 原文地址:https://www.cnblogs.com/xqxacm/p/4561592.html
Copyright © 2011-2022 走看看