【问题标题】:Menu Items not rendering in Android Emulator菜单项未在 Android 模拟器中呈现
【发布时间】:2017-01-31 23:52:12
【问题描述】:

我正在尝试在顶部操作栏中创建一个注销菜单项。我执行了以下步骤:

1)res>右键>新建>android资源目录>资源类型>菜单>ok

2) 右键单击​​新建的菜单文件夹并选择新建 > 文件 > main_menu.xml

3) 基于这些文档https://developer.android.com/guide/topics/resources/menu-resource.html,我在 main_menu.xml 文本视图中添加了以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
</menu>

4) 在 main_menu.xml 设计视图中,我将一个菜单项拖到菜单中。我给它一个 id、一个标题和 showAsAction 设置为 always。然后我返回到文本视图并注意到生成了以下内容:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Logout" android:id="@+id/@+id/logout" android:showAsAction="always"/>
</menu>

5) 我修复了 id 并注意到 showAsAction 它给出了以下消息:

Should use app:showAsAction with appcompat library with xmlns:app="schemas.android.com/apk/res-auto"'; 

我运行了应用程序,但菜单项从未出现过。

通过研究,我将xml更改为:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_settings" android:title="Logout"
          android:orderInCategory="100" app:showAsAction="always"/>
</menu>

我什至尝试将其添加到 xml:

xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"

但菜单项未显示在 MainActivity 屏幕上。

【问题讨论】:

标签: android


【解决方案1】:

您应该在活动的 onCreateOptionMenu 方法中为菜单充气:getMenuInflater().inflate(R.menu.main_menu,menu)

【解决方案2】:

这些也是那篇文章的有用注释:

工具栏已在 Android 5.0 (API 21) 中引入。如果你想 要在具有早期 Android 版本的设备上使用工具栏,您可以 使用 appcompat-v7 支持库提供的下端口。

目标 SDK 版本低于 API 11 的应用程序使用 选项菜单,如果设备上有这样的按钮。选项 如果用户按下选项按钮,则会显示菜单。工具栏 栏优于选项菜单,因为操作栏明显 可见,而选项菜单仅应要求显示。

工具栏中的条目通常称为操作。虽然它是 可以通过代码在操作栏中创建条目,通常是 在 XML 资源文件中定义。 每个菜单定义都包含在 res/menu 文件夹中的单独文件中。 Android 工具会自动创建一个引用 到 R 文件中的菜单项条目,以便菜单资源可以 访问。

MenuInflator 类允许对 XML 中定义的操作进行膨胀 文件并将它们添加到操作栏。 MenuInflator 可以访问 通过您活动中的 getMenuInflator() 方法。

@Override public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu,菜单);返回真; }

如果一个动作被选中,onOptionsItemSelected() 方法在 调用相应的活动。它接收选定的操作为 参数。

@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { 你可以改变 运行时的工具栏。下面的代码演示了这一点。

ActionBar actionBar = getActionBar(); actionBar.hide(); actionBar.show();

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多