【问题标题】:Actionbar does not show items操作栏不显示项目
【发布时间】:2015-06-06 01:23:49
【问题描述】:

我知道这个问题已经被问过好几次了。但我想我必须自己问这个问题,因为现有的问题都不适合我的问题:

我正在为 Kitkat(4.4) 开发并尝试使用主题为:holo.light.darkActionBar 的操作栏。

我使用菜单中的项目创建了一些 xml 文件,并将其在 java 类中链接到活动:

菜单/主目录:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/action_filter"
    android:title="@string/action_filter"
    android:orderInCategory="100"
    android:icon="@drawable/ic_action_filter"
    app:showAsAction="ifRoom" />

主活动:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    menu.clear();
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

问题如下: 当我单击 menu/main.xml 时,我可以看到一个项目已添加到操作栏中。但它从未出现在 activity_main.xml 中。

我搜索了好几个小时并考虑了以下问题: -将 minSDK 设置为 19 -我知道有时它不会显示,因为设备有一个菜单按钮。但是我使用了一个图标并说应该显示它。因此它应该出现。而且我还使用没有菜单按钮的 Nexus Emulation。 -我使用Android studio并在android studio的帮助下插入活动。 -mainActivity 扩展了 FragmentActivity(因为我选择了 google maps 活动) -我尝试了其他主题,但操作栏完全消失了(oc没有使用.noActionBar!) -我为操作栏设置了一种样式,并在那里指定了一种红色。此颜色会传播到 Activity,但不会传播到项目。

我的进口是:

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.Menu;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

它的外观:

现在的样子:

我真的很希望你们中的一些人能帮助我,这让我发疯了。

【问题讨论】:

标签: java android android-actionbar android-4.4-kitkat


【解决方案1】:

我认为,你的菜单膨胀代码应该是这样的:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}

并删除menu.clear() 行。

【讨论】:

  • 感谢您的回答。不幸的是,它不起作用。 ps:我的菜单文件名是main(但这并不重要)
  • 我改变了它和 CommonsWare 告诉我的东西,现在它可以工作了 :)
【解决方案2】:

尝试使用带有主题的操作栏:holo.light.darkActionBar

这意味着您正在尝试使用本机操作栏。

我使用菜单中的项目创建了一些 xml 文件,并将其在 java 类中链接到活动

去掉app命名空间,将app:showAsAction重命名为android:showAsActionapp 约定用于appcompat-v7 操作栏后向端口,您没有使用它。

主活动:

摆脱menu.clear()

但它从未出现在 activity_main.xml 中。

这是不应该的。它应该在您运行应用程序时显示,而不一定在其他资源的编辑器中显示。

我还使用没有菜单按钮的 Nexus Emulation

肯定有带有 MENU 按钮的 Nexus 设备。尝试按 PgUp;如果您从屏幕底部看到溢出菜单,则您的模拟器有一个 MENU 按钮。

【讨论】:

  • 我认为这是正确的方向:我认为 android studio 使该项目与旧版本兼容,因此它使用 appcompat。我在哪里可以指定我想要本机操作栏而不是用 appcompat 编译?我试图将其更改为android,但它说我应该使用app。我猜有些地方设置为 appcompat。
  • @SeadiMove:“我在哪里可以指定我想要本机操作栏而不是使用 appcompat 编译?” -- 从模块的build.gradle 文件中的dependencies 名册中删除appcompat-v7。从您的菜单资源中删除 app XML 命名空间并将这些 app 前缀替换为 android。让您的活动继承自 Activity 而不是 ActionBarActivityAppCompatActivity。让您的主题(例如,res/values/styles.xml)继承自 AppCompat 主题以外的其他内容。可能还有其他一些杂项更改,但这会让您大步向前。
  • 实际上现在可以了。但不显示在渲染器中。感谢您的回答!我还想知道我是否可以配置该应用程序不应该与非常晚的版本兼容。我已经选择了 minSDK 和 targetSDK
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2015-12-21
  • 1970-01-01
相关资源
最近更新 更多