android学习笔记(45)android上下文菜单

文章标签: android,android-menu
2015-1-13 13:06:52     人阅读    

        Android用ContextMenu来代表上下文菜单,为Android应用开发上下文菜单与开发选项菜单的方法基本相似,因为 ContextMenu继承了 Menu,因此程序可用相同的方法为它添加菜单项。 
       当然,开发上下文菜单与开发选项菜单的区别在于:开发上下文菜单不是重写 OnCreateOptionsMenu(Menu menu)方法,而是重写 onCreateContextMenu(ContextMenu menu,View source,ContextMenu.ContextMenuInfo menulnfo)方法。其中 source参数代表触发上下文菜单的组件。
       开发上下文菜单的步骤如下。
           重写 Activity 的 onCreateContextMenu(ContextMenu menu, View source,ContextMenu. Context Menulnfo menulnfo)方法。
           调用八以卜办的registerForContextMenu(View view)方法为view组件注册上下文菜单。 G如果希望应用程序能为菜单项提供响应,可以考虑重写

OnContextItemSdected(Memiltemmi)方法,或为指定菜单项绑定事件监听器。
ContextMenu提供了如下方法同样可以为上下文菜单设置图标、标题等。
ContextMenu setHeaderlcon(Drawable icon):为上下文菜单设置图标。
ContextMenu setHeaderlcon(int iconRes):为上下文菜单设置图标。
ContextMenu setHeaderTitle(int titleRes):为上下文菜单设置标题。


下面的程序示范了如何开发上下文菜单,该程序的用户界面同样很简单,故不再给出界 面布局文件。下面是该程序的Java代码。
程序清单:ContextMenuTest \src\oi^\crazyit\contextMenuText\ContextMenuTesLjava

package org.crazyit.contextmenu;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class ContextMenuTest extends Activity
{
 // 为每个菜单定义一个标识
 final int MENU1 = 0x111;
 final int MENU2 = 0x112;
 final int MENU3 = 0x113;
 private TextView txt;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  txt = (TextView) findViewById(R.id.txt);
  // 为文本框注册上下文菜单
  registerForContextMenu(txt);
 }

 // 每次创建上下文菜单时都会触发该方法
 @Override
 public void onCreateContextMenu(ContextMenu menu, View source,
  ContextMenu.ContextMenuInfo menuInfo)
 {
  menu.add(0, MENU1, 0, "红色");
  menu.add(0, MENU2, 0, "绿色");
  menu.add(0, MENU3, 0, "蓝色");
  // 将三个菜单项设为单选菜单项
  menu.setGroupCheckable(0, true, true);
  //设置上下文菜单的标题、图标
  menu.setHeaderIcon(R.drawable.tools);
  menu.setHeaderTitle("选择背景色");
 }

 // 菜单项被单击时触发该方法。
 @Override
 public boolean onContextItemSelected(MenuItem mi)
 {
  switch (mi.getItemId())
  {
   case MENU1:
    mi.setChecked(true);
    txt.setBackgroundColor(Color.RED);
    break;
   case MENU2:
    mi.setChecked(true);
    txt.setBackgroundColor(Color.GREEN);
    break;
   case MENU3:
    mi.setChecked(true);
    txt.setBackgroundColor(Color.BLUE);
    break;
  }
  return true;
 }
}


上面的程序重写了 〇nCreateContextMenu(ContextMenu menu,View source,
ContextMenu.Context Menulnfo menulnfo)方法,该方法的内部为程序创建了一个上下文菜单。


程序在①号代码处调用registerForContextMenu(txt)为txt组 件(一个文本框组件)注册了上下文菜单,这意味着当用户长按 该组件时显示上下文菜单。上下文菜单如图2.64所示。
需要指出的是,实际上Android提供了两种创建菜单的方 式,一种是在Java代码中创建,一种是使用XML资源文件定义。 一般推荐使用XML资源文件来定义菜单,这种方式可以提供更 好的解耦,本书将在Android资源一章介绍如何使用XML资源 来定义菜单。


原文地址:http://www.itmmd.com/201501/485.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android 在一条线的中间添加文本   上一篇
下一篇  android学习笔记(44)android设置与菜单项关联的Activity
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!