本篇是对安卓菜单使用编程方式实现,当然可以使用XML的方式完成同样的功能,基本Java和C#写法都是一致的,所以使用XML的方式在本篇中使用Java演示,需要注意的是,对于如果不是VS开发的话,那么资源文件名称必须以小写开头,否则会报错。

运行效果

C#实现

using Android.App;
using Android.OS;
using Android.Views;
using Android.Widget; namespace MenuDemo
{
[Activity(Label = "@string/ApplicationName", MainLauncher = true, Icon = "@drawable/Icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle); SetContentView(Resource.Layout.Main);
var iv = FindViewById<ImageView>(Resource.Id.iv);
iv.SetImageResource(Resource.Drawable.test);
RegisterForContextMenu(iv);
}
//与一个活动关联
public override bool OnCreateOptionsMenu(IMenu menu)
{
base.OnCreateOptionsMenu(menu);
const int menuItemId = Menu.First;
const int menuItemOrder = Menu.None;
const int munuItemText = Resource.String.menuItem1;
/*
* 第一个参数:组值
* 第二个参数:菜单唯一标示
* 第三个参数:顺序参数
* 第四个参数:文本
*/
menu.Add(, menuItemId, menuItemOrder, munuItemText);
menu.Add(, menuItemId + , menuItemOrder + , "菜单2");
menu.Add(, menuItemId + , menuItemOrder + , "菜单3" );
var subMenu = menu.AddSubMenu(, menuItemId + , menuItemOrder + , "子菜单" );
subMenu.SetHeaderIcon(Resource.Drawable.more);
var subMenuItem1 = subMenu.Add(, menuItemId + , menuItemOrder + ,"子菜单-1" );
subMenuItem1.SetIcon(Resource.Drawable.more);
var subMenuItem2 = subMenu.Add(, menuItemId + , menuItemOrder + ,"子菜单-2" ).SetCheckable(true);
subMenuItem2.SetIcon(Resource.Drawable.blue);
subMenu.Add(, menuItemId + , menuItemOrder + , "子菜单-3" ).SetCheckable(true);
return true;
} public override bool OnOptionsItemSelected(IMenuItem item)
{
Toast.MakeText(this, "当前菜单编号" + item.ItemId, ToastLength.Long).Show();
return base.OnOptionsItemSelected(item);
} public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo)
{
base.OnCreateContextMenu(menu, v, menuInfo);
menu.SetHeaderTitle("上下文菜单");
menu.SetHeaderIcon(Resource.Drawable.blue);
menu.Add(, Menu.First, Menu.None, "菜单1");
menu.Add(, Menu.First+,Menu.None, "菜单2").SetShortcut('','B');
menu.Add(, Menu.First + , Menu.None, "菜单3");
var subMenu = menu.AddSubMenu("子菜单");
subMenu.Add("子菜单选项");
}
}
}

Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/iv" />
</LinearLayout>

运行效果

Java实现

package com.example.halower.menudemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv=(ImageView)findViewById(R.id.iamgeView);
iv.setImageResource(R.drawable.test);
registerForContextMenu(iv);
} @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater=new MenuInflater(this);
inflater.inflate(R.menu.menu_main,menu);
menu.setHeaderIcon(R.drawable.blue);
menu.setHeaderTitle(R.string.menuTitle);
}
}
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">MenuDemo</string>
<string name="action_settings">Settings</string>
<string name="item1Name" >菜单1</string>
<string name="item2Name" >菜单2</string>
<string name="item3Name" >菜单3--More</string>
<string name="item4Name" >菜单4</string>
<string name="menuTitle">XML中解析菜单</string>
<string name="subitem1Name">子菜单1</string>
<string name="subitem2Name">子菜单2</string>
</resources>

最新文章

  1. TCSQL实时列表缓存数据库帮助文档
  2. 连接到kali linux服务器上的MySQL服务器错误
  3. 如何通过iframe以post方式提交form表单
  4. arm-linux移植MT7601Uusb无线网卡(小度wifi,360随身WIFI 2代)
  5. 你好,C++(39)6.4.4 依葫芦画瓢:用C++表达设计结果(下)
  6. cassandra + lucene集成
  7. Hibernate 、继承关联映射
  8. [置顶] MongoDB 分布式操作——分片操作
  9. poj1679(最小生成树)
  10. 经纪xx系统节点VIP案例介绍和深入分析异常
  11. 如何使用LIBSVM,从安装到基本实例使用
  12. Python3常用网络编程模块介绍
  13. 8Manage:聚焦研发企业利器——研发项目管理
  14. 深入浅出JMS 消息队列
  15. php的trie_filter扩展安装敏感词查找
  16. 001.Linux开机启动过程
  17. 如何干净的卸载docker
  18. Android -- EventBus使用
  19. Django配合MySQL学习Django模型外键的建立和使用
  20. WPF基础学习笔记整理 (八) 命令

热门文章

  1. ReportServices如何在一页中将报表分成两列显示
  2. jQuery对数组操作
  3. JS 获取CSS属性值
  4. Spring,Mybatis 整合Memcache
  5. 【CentOS7之防火墙命令】
  6. Shell脚本学习第二课&#183;
  7. nuget国内镜像的解决办法
  8. HTML &lt;input type=&quot;file&quot;&gt;上传文件——结合asp.net的一个文件上传示例
  9. BZOJ 3527: [Zjoi2014]力
  10. js_原型