在操作栏中没有显示动作按钮

3
我一直在尝试按照官方Android开发教程进行学习,但我发现两种可用的IDE(Eclipse和附带ADT插件的Android Studio)之间存在一些差异。听说后者很好用,所以我正在使用它,但是似乎在创建新项目时文件布局有所不同。我已经解决了大部分问题,使其与教程上使用的Eclipse IDE一样工作,但是我无法弄清为什么我的操作按钮不显示在ActionBar中。这里是参考教程。

所以,这就是我的res/menu/main.xml文件的样子:

<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="com.example.myapplicationn.app.MainActivity" >

<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      app:showAsAction="ifRoom" />

<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:orderInCategory="100"
      app:showAsAction="never" />

</menu>

我所做的只是替换了action_settings并直接从教程的示例代码中复制了action_search。这里有一个微妙(也许不那么微妙)的区别:教程的文件应该是res/menu/main_activity_actions.xml,但其AS等效文件似乎是默认文件res/menu/main.xml,所以我选择了后者。此外,教程示例仅具有第一个属性(xmlns:android="http://schemas.android.com/apk/res/android"),但AS创建的文件具有这些附加属性,所以我保持原样未修改它们。然后,我使用以下内容修改了onCreateOptionsMenu方法:

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

再次强调,原始代码使用的是R.menu.main_activity_actions,所以我将其更改为R.menu.main。项目编译顺利,在几秒钟后我的手机上出现了MainActivity,但是action_search仍然隐藏在操作溢出(这不是它的称呼吗?)按钮下面。我做错了什么吗?任何帮助将不胜感激。英语不是我的母语,我的写作风格有点糟糕,对此感到抱歉。

6个回答

3
我最近也遇到了同样的问题。
showAsAction属性在app命名空间中。教程中解释了当使用兼容库时该属性被使用。但是,如果你的API级别足够高,则不需要这样做。
我能够使用android命名空间,并且它对我很好用。所以将app:showAsAction改为android:showAsAction,然后就会出现在您想要的位置。

那我能想到的唯一其他事情就是将showAsAction属性设置为“always”而不是“ifroom”。 - Snikk
该死,我已经尝试过了。也许我会尝试开始一个新项目,看看能否从头开始。谢谢。 - Juan José Castro

2
尝试使用这个 menu.xml 文件。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:showAsAction="ifRoom"
    android:title="@string/action_search"/>
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>


不对,还没到那儿。不过还是谢谢。 - Juan José Castro

1

请确保创建菜单的活动继承自ActionBarActivity,这是使用支持库时的基本活动类。

否则,无论您在app:showAsAction中设置什么都不会起作用。

我曾经为此苦苦思索过,不知道为什么他们在您提供的教程中没有提到这一点。

希望这是您的问题所在。


0

来晚了。对于那些仍然遇到这个问题的人, 尝试删除这一行。

xmlns:app="http://schemas.android.com/apk/res-auto"

并且改变

app:showAsAction="always"

android:showAsAction="always"

重要提示: 请确保您的PNG图像大小不超过27x27


有趣的是,Android Studio 告诉我们要做完全相反的事情。 - NightHowler
@Vishwas 推荐的方法是使用 app:showAsAction(...),但对于这种情况来说则相反。奇怪。 - zackygaurav

0
我在使用Android Studio并遵循官方教程时遇到了完全相同的问题。以下是对我有效的解决方法,但我不知道为什么。
1)我使用了ic_launcher而不是ic_action_search,只是为了检查搜索图标文件本身是否存在问题。
<item android:id="@+id/action_search"
          android:icon="@drawable/ic_launcher"
          android:title="@string/action_search"
          app:showAsAction="ifRoom" />

现在我可以看到启动器图标是可见的。

2)然后我再次从“操作栏图标包”中下载了图标,并将 android:icon 更改回 ic_action_search

现在搜索按钮可见了。

就像我说的,不确定为什么这有效。


0

我也是,一直在跟随你发布的教程链接学习。但是遇到了同样的问题,工具栏中的按钮无法显示,尝试了不同的解决方案。最终,在Udacity上找到了一个可行的方法。

解决方案: 在你的MainActivity中添加以下代码:

@Override
public boolean onCreateOptionsMenu(Menu menu){
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.your_menu,menu);
    return true;
}

其余部分与官方链接中的代码相同,此处链接为https://developer.android.com/training/appbar/actions.html#add-actions


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接