7 使用ContextMenu实现上下文菜单

7-1 认识ContextMenu (03:09)

长按某个视图,弹出的菜单就是ContextMenu

ContextMenu的组成:

  标题以及标题图标

  菜单内容

  菜单内容的点击响应事件

ContextMenu与OptionMenu的区别:

  OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
  contextMenu对应的是view,每一个view都可以设置上下文菜单 

  一般情况下ContextMenu常用于ListView或者GriView;

ContextMenu创建方法

  首先给View注册上下文菜单registerForContextMenu()
  添加上下文菜单内容onCreateContextMenu()
    可以通过代码动态添加;
    可以加载XML文件中的菜单项;
  设置菜单点击后响应事件onContextItemSelected()

7-2 创建ContextMenu菜单 (14:26)

一、創建一個xml文件listview

  在java中初始化listview=findviebyid..

二、构造listview显示的数据

三、设置listview的显示内容

  添加数据源listview.setAdapter(new Arrayadapter<String>(this,layout,Arraylist));

  注册上下文菜单 this.registerForContextMenu(listview);

四、寫onCreateContextMenu方法:

  添加上下文菜单内同
    public void onCreateContextMenu(....){
      menu.setHeaderTitle("");
      menu.setHeaderIcon();
      menu.add(groupid,itemid,order排序,title);
    }

五、设置菜单项点击事件
  onContextItemSelected(MenuItem item){
    switch(item.getItemId){
      case id:
        XXX;
        break;
      }
    }

动态:

package com.imooc.contextmenudemo;

import java.util.ArrayList;
import java.util.zip.Inflater;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showListView();
    }

    /**
     * 设置listview的显示内容
     */
    private void showListView() {
        ListView listview = (ListView) findViewById(R.id.listview);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData());
        listview.setAdapter(adapter);
        this.registerForContextMenu(listview);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        // 设置Menu显示内容
        menu.setHeaderTitle("文件操作");
        menu.setHeaderIcon(R.drawable.ic_launcher);
        menu.add(1, 1, 1, "复制");
        menu.add(1, 2, 1, "粘贴");
        menu.add(1, 3, 1, "剪切");
        menu.add(1, 4, 1, "重命名");
        
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case 1:
            Toast.makeText(MainActivity.this, "点击复制", Toast.LENGTH_SHORT).show();
            break;

        case 2:
            Toast.makeText(MainActivity.this, "点击粘贴", Toast.LENGTH_SHORT).show();
            break;

        case 3:
            Toast.makeText(MainActivity.this, "点击剪切", Toast.LENGTH_SHORT).show();
            break;

        case 4:
            Toast.makeText(MainActivity.this, "点击重命名", Toast.LENGTH_SHORT).show();
            break;
        }

        return super.onContextItemSelected(item);

    }

    /**
     * 构造listview显示的数据
     * 
     * @return
     */
    private ArrayList<String> getData() {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 5; i++) {
            list.add("文件" + (i + 1));
        }
        return list;
    }
}

静态:

package com.imooc.contextmenudemo;

import java.util.ArrayList;
import java.util.zip.Inflater;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showListView();
    }

    /**
     * 设置listview的显示内容
     */
    private void showListView() {
        ListView listview = (ListView) findViewById(R.id.listview);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, getData());
        listview.setAdapter(adapter);
        this.registerForContextMenu(listview);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        //设置Menu显示内容
        menu.setHeaderTitle("文件操作");
        menu.setHeaderIcon(R.drawable.ic_launcher);
//        menu.add(1, 1, 1, "复制");
//        menu.add(1, 2, 1, "粘贴");
//        menu.add(1, 3, 1, "剪切");
//        menu.add(1, 4, 1, "重命名");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
    }
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case R.id.context_menu_item1:
            Toast.makeText(MainActivity.this, "点击复制",Toast.LENGTH_SHORT).show();
            break;

        case R.id.context_menu_item2:
            Toast.makeText(MainActivity.this, "点击粘贴",Toast.LENGTH_SHORT).show();
            break;

        case R.id.context_menu_item3:
            Toast.makeText(MainActivity.this, "点击剪切",Toast.LENGTH_SHORT).show();
            break;

        case R.id.context_menu_item4:
            Toast.makeText(MainActivity.this, "点击重命名",Toast.LENGTH_SHORT).show();
            break;
        }
        
        return super.onContextItemSelected(item);
    
    }
    
    /**
     * 构造listview显示的数据
     * 
     * @return
     */
    private ArrayList<String> getData() {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 5; i++) {
            list.add("文件" + (i + 1));
        }
        return list;
    }
}

 

Main.xml

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

    <item
        android:id="@+id/context_menu_item1"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="复制"/>
  <item
        android:id="@+id/context_menu_item2"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="粘贴"/>
    
    <item
        android:id="@+id/context_menu_item3"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="剪切"/>
    <item
        android:id="@+id/context_menu_item4"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="重命名"/>
    
</menu>

         

 

posted @ 2016-04-12 12:23  沉默的羊癫疯  阅读(276)  评论(0编辑  收藏  举报