android学习笔记(42)android使用监听器来监听菜单事件

文章标签: android
2015-1-12 10:10:53     人阅读    

使用监听器来监听莱羊事件
除了重写OnOptionsItemSelected(MenuItem item)方法来为菜单单击时间编写响应之外, Android同样允许开发者为不同菜单分别绑定监听器。为菜单项绑定监听器的方法为: setOnMenuItemClickListener。
在这种方式下,我们可以釆用简单方法来添加菜单项,无须为每个菜单项目指定ID,如 以下程序所示。
程序清单:codes\02\2.7\MenuListener\src\org\crazyit\menu\MenuListener.java

package org.crazyit.menu;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.EditText;
import android.widget.Toast;

public class MenuListener extends Activity
{
 private EditText edit;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  edit = (EditText) findViewById(R.id.txt);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu)
 {
  // -------------向menu中添加字体大小的子菜单-------------
  SubMenu fontMenu = menu.addSubMenu("字体大小");
  // 设置菜单的图标
  fontMenu.setIcon(R.drawable.font);
  // 设置菜单头的图标
  fontMenu.setHeaderIcon(R.drawable.font);
  // 设置菜单头的标题
  fontMenu.setHeaderTitle("选择字体大小");  
  MenuItem font10 = fontMenu.add("10号字体");
  MenuItem font12 = fontMenu.add("12号字体");
  MenuItem font14 = fontMenu.add("14号字体");
  MenuItem font16 = fontMenu.add("16号字体");
  MenuItem font18 = fontMenu.add("18号字体");
  //依次为每个菜单项绑定监听器
  font10.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextSize(10 * 2);
    return false;
   }
  });
  font12.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextSize(12 * 2);
    return false;
   }
  });
  font14.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextSize(14 * 2);
    return false;
   }
  });
  font16.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextSize(16 * 2);
    return false;
   }
  });
  font18.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextSize(18 * 2);
    return false;
   }
  }); 
  // -------------向menu中添加普通菜单项-------------
  MenuItem plain = menu.add("普通菜单项");
  plain.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    Toast toast = Toast.makeText(MenuListener.this
     , "单击了普通菜单项", Toast.LENGTH_SHORT);
    toast.show();
    return false;
   }
  }); 
  // -------------向menu中添加文字颜色的子菜单-------------
  SubMenu colorMenu = menu.addSubMenu("字体颜色");
  colorMenu.setIcon(R.drawable.color);
  // 设置菜单头的图标
  colorMenu.setHeaderIcon(R.drawable.color);
  // 设置菜单头的标题
  colorMenu.setHeaderTitle("选择文字颜色"); 
  MenuItem redItem = colorMenu.add("红色");
  MenuItem greenItem = colorMenu.add("绿色");
  MenuItem blueItem = colorMenu.add("蓝色");
  //依次为每个菜单项目绑定监听器
  redItem.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextColor(Color.RED);
    return false;
   }
  }); 
  greenItem.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextColor(Color.GREEN);
    return false;
   }
  }); 
  blueItem.setOnMenuItemClickListener(new OnMenuItemClickListener()
  {
   @Override
   public boolean onMenuItemClick(MenuItem item)
   {
    edit.setTextColor(Color.BLUE);
    return false;
   }
  });  
  return super.onCreateOptionsMenu(menu);
 }
}


该程序与前一个程序的运行效果完全相同,它们的区别仅仅是处理菜单单击事件的监听 方式不同而已。
一般来说,通过重写OnOptionsItemSelected(MenuItem mi)方法来使处理菜单的单击事件 更加简洁,因为所有的事件处理代码都控制在该方法内;通过为每个菜单绑定事件监听器则 具有更清晰的逻辑,但代码难免显得臃肿。


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

android学习笔记(43)android创建单选菜单和复选菜单   上一篇
下一篇  android学习笔记(41)android选项菜单和子菜单(SubMenu )
精彩回复
我要追加问题,请求站长解决!
姓名:       

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