如何在android中创建选项菜单?

2024-03-27

我想使用 c# 和 Xamarin Studio 在 Android 应用程序中创建一个简单的选项菜单。我该怎么做?

我还没有找到任何这方面的 C# 示例。有人可以简单解释一下如何创建选项菜单吗?


定义菜单

创建菜单的一种方法是使用放置在 Xamarin.Android 项目的 Resources/menu/ 文件夹中的 XML 文件。

例如:

资源/菜单/mymenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/item1"
        android:title="Item 1"/>
  <item android:id="@+id/item2"
        android:title="Item 2"/>
  <item android:id="@+id/item3"
        android:title="Item 3"/>
</menu>

要查看可以在菜单 xml 文件中定义哪些其他选项,请参阅官方文档 http://developer.android.com/guide/topics/resources/menu-resource.html.

使用菜单

您可以在多个位置扩充 xml 菜单。 举几个例子:

在工具栏中

Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.mytoolbar);
toolbar.InflateMenu(Resource.Menu.mymenu);

处理点击

要处理工具栏菜单上的单击事件,您必须实现Toolbar.IOnMenuItemClickListener通过重写以下方法来实现接口:

public bool OnMenuItemClick(IMenuItem item)
{
    switch (item.ItemId)
    {
        case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

然后,您必须将实现该接口的类作为侦听器添加到工具栏:

toolbar.SetOnMenuItemClickListener(your_listener_class);

在 Activity 或 Fragment 的默认菜单位置(已弃用)

在大多数情况下,活动或片段的默认菜单位置是硬件菜单按钮或 ActionBar。 可以通过重写以下方法来在此处添加菜单:

在活动中:

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.mymenu, menu);
    return true;
}

在片段中:

public override void OnCreateOptionsMenu(IMenu menu, MenuInflater inflater)
{
    inflater.Inflate(Resource.Menu.mymenu, menu);
}

确保你有HasOptionsMenu在 Fragment 的 onCreate 中设置为 true 才能使其工作。

处理点击

然后,您可以通过覆盖来处理对菜单的点击OnOptionsItemSelected

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
       case Resource.Id.item1: 
                //Do stuff for item1
                return true;
        case Resource.Id.item2: 
                //Do stuff for item2
                return true;
        case Resource.Id.item3:
                //Do stuff for item3
                return true;
        default:
                return false;
     }
}

处理完所选项目后,我们返回 true 以通知系统这一点。

替代方案:以编程方式创建菜单

一个非常基本的菜单是通过覆盖OnCreateOptionsMenu像这样的方法:

public override bool OnCreateOptionsMenu(IMenu menu)
{
      menu.Add(0,0,0,"Item 0");
      menu.Add(0,1,1,"Item 1");
      menu.Add(0,2,2,"Item 2");
      return true;
}

然后,您可以通过覆盖选项菜单中的点击来处理OnOptionsItemSelected method.

public override bool OnOptionsItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case 0: 
                //Do stuff for item 0
                return true;
        case 1: 
                 //Do stuff for item 1
                return true;
        case 2: 
                //Do stuff for item 2
                return true;
        default:
                return false;
     }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中创建选项菜单? 的相关文章

  • Android - 具有可序列化对象的 SharedPreferences

    我知道 SharedPreferences 有putString putFloat putLong putInt and putBoolean 但我需要存储一个类型的对象Serializable in SharedPreferences 我
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 如何将 currentTimeMillis 转换为可读的日期格式? [复制]

    这个问题在这里已经有答案了 我想用currentTimeMillis两次 这样我就可以计算持续时间 但我也想以用户可读的格式显示时间和日期 我遇到了麻烦currentTimeMillis有利于计算 但我看不到内置函数可以转换为合适的时间或时
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • Android 可扩展 GridView 就像 Google 图像一样

    我想创建可扩展的 GridView 其行为类似于 Google 图像页面 我想知道如何实现这样的功能 当我单击其中一张图像时 页面会展开并显示图片的详细信息 Android 中是否可以做类似的事情 Images grid Expanded
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • ASP.NET Core Razor Page 多路径路由

    我正在使用 ASP NET Core 2 0 Razor Pages 不是 MVC 构建系统 但在为页面添加多个路由时遇到问题 例如 所有页面都应该能够通过 abc com language 访问segment shop mypage 或
  • 随着速度变化,速度表针规绕其中心旋转

    Hi all 我编写了一个应用程序 其中有一个速度计 其指针垂直设置为 90 度 我试图以每秒变化的速度绕其中心旋转指针 我在文本视图中显示变化的速度 从 0 到 120 随机 我正在从远程服务获取速度并显示在文本视图中 因此 当速度发生变
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 如何为背景图像添加内边距

    我有一个LinearLayout其中有一个背景图像 一个 9 修补的 png 文件 如何向左和右添加填充 以使背景图像不占据整个宽度 我努力了android paddingLeft and android paddingRight 但这并没
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t
  • 同时有两个操作栏(底部和向上)?

    我需要制作两个操作栏 顺便说一下我正在使用actionBarSherlock 所以我真正需要的是在正常操作栏上放置一个 欢迎屏幕 开关 并添加两个正常的 ActionBar 操作选项 与我需要的类似的是 Gmail 和地图 如下所示 htt

随机推荐

  • 如何在新算法中添加weka特征?

    我想在 weka 中添加一种新算法 在一个算法中具有分类 聚类 关联等功能 我应该如何编写代码来包含所有 weka 功能 并为这个新算法向 weka 添加一个选项卡 我已经向 weka 添加了一个虚拟算法 现在它可以工作了我想添加一个结合了
  • 如何获取按输入顺序排序的 python Counter 输出?

    我一直在努力获取计数 频率 然后制作它的图形表示 我在用Counter班级来自collections使用Python 我想要的输出Counter按照先到对象的顺序 例如 offset a b c a b b b c c c c c coun
  • WCF - 回调客户端(双工?)

    我有一个问题 不知道该选择什么解决方案 我有一台正在运行的服务器 正在运行可以从网站接收订单的服务 多个客户端 远程计算机 以某种方式连接到该服务器 我真的很想使用 WCF 进行所有通信 但不确定是否可行 我不想在路由器中配置所有客户端防火
  • 握手期间连接终止

    这真的很令人沮丧 浪费了 3 天的时间来解决 但在 Macos Catalina 版本 10 15 1 和 Windows 7 上仍然出现卡住问题 我的两台电脑显示相同的错误 第一次当我尝试 获取包裹 时 它显示了 Users mamun
  • BL 服务:异常还是方法结果?

    最好的方法是什么 为什么 V1 try var service IoC Resolve
  • 如何为 Google 地图创建“大小圆圈”图例

    我有一个自定义的谷歌地图 它使用 GeoJSON 文件中的数据创建大小的圆圈 我需要做的是创建一个图例 键来解释每个圆圈的大小代表什么 我尝试按照 Google 的指南创建自定义图例 https developers google com
  • 我的 PHP 卷曲请求出了什么问题,请帮忙..我没有得到任何数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 它说浏览器
  • 如何(最好)将 WM_QUIT 发布到正在运行的进程?

    目标 关闭Windows下正在运行的32位GUI进程 我可以访问可执行路径名 该软件可能有多个副本正在运行 但只有一个副本是从唯一的可执行路径名启动的 由于可以运行该可执行文件的多个实例 因此只需查看顶层窗口就需要区分哪个可执行文件路径名实
  • jsPDF fromHTML() 不显示 HTML

    我正在研究一个简单的 javascript 我正在使用 jsPDF 库 但脚本加载了一个空白的 pdf 这是代码
  • 在 Objective-C 中查找一个不区分大小写的字符串

    我的问题类似于Objective C 中如何检查一个字符串是否包含另一个字符串 https stackoverflow com q 2753956 602011 如何检查字符串 NSString 是否包含另一个较小的字符串但忽略大小写 NS
  • 未找到:操作类型未注册“CountExtremelyRandomStats”

    在 docker 容器中运行 bazel 命令时出现以下错误 命令运行 bazel bin tensorflow serving model servers tensorflow model server port 9000 model n
  • 如何连接到docker Oracle实例

    我正在关注这些指示 https github com oracle docker images tree master OracleDatabase 我创建了一个像这样的 docker 容器 docker run name oracle p
  • 删除旧的 .PhpStorm 目录是否安全

    每次我将 PhpStorm 升级到新的单点版本时 我的主目录中都会保留以前的版本 我现在有 PhpStorm2017 1 PhpStorm2017 2 PhpStorm2017 3 PhpStorm2018 1 PhpStorm2018 2
  • 如何在 Android Studio 中编辑 .jar 文件

    如何使用 Android Studio 编辑 jar 文件中的 class 文件中的代码 当然 我已经尝试过编辑它 由于某种原因 我试图编辑的类是只读的 Jar文件是压缩档案 zipped files class文件 以及一些其他资源 cl
  • 学习 C# Excel 互操作的资源 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有哪些资源可以帮助我快速启动并运行 C 中的 Excel 互操作 文章从 Visual Studio 2005 开发人员的角度理解 Exc
  • 使用 scipy 中的 optimization.minimize 和 2 个变量和插值函数

    我没有找到使用多维函数从 scipy 执行 optimize minimize 的方法 在几乎所有示例中 解析函数都得到优化 而我的函数则被插值 测试数据集如下所示 x np array 2000 2500 3000 3500 y np a
  • Spark fat jar 在 YARN 上运行多个版本

    我有一个旧版本的 Spark 设置和 YARN 我不想删除它 但仍然想使用较新的版本 我找到了一个couple https community cloudera com t5 Advanced Analytics Apache Spark
  • 窗口对象中奇怪的 self 对象

    我不明白为什么window在下面self and self在下面window目的 如果你去开发工具或 Firebug 并写window你得到了DOM window反对self位于该对象下 奇怪的部分是window在下面self again
  • 在Vue js中显示错误消息

    我有一个以下组件 其中有一个更新员工的方法 我想在 ajax 调用的 错误 回调中分配 更改 erroMessage 变量后立即在视图中显示错误消息 var EmployeeEdit Vue extend template employee
  • 如何在android中创建选项菜单?

    我想使用 c 和 Xamarin Studio 在 Android 应用程序中创建一个简单的选项菜单 我该怎么做 我还没有找到任何这方面的 C 示例 有人可以简单解释一下如何创建选项菜单吗 定义菜单 创建菜单的一种方法是使用放置在 Xama