如何在 Activity 中正确显示搜索图标?

How do I properly display search icon in Activity?

我创建了一个小型测试应用程序来练习在正常 Activity 中设置操作栏(不是 ActionBarActivity),因为我只打算使用 API 15级及以上。我想在操作栏上显示搜索图标。如果我这样设置 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=".MainActivity">
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="ifRoom"/>
</menu>

我可以在我的模拟器中将应用程序安装到 运行 并显示图标,但在 Android Studio 中弹出错误消息:

"When using the appcompat library, menu resources should refer to the showAsAction in the app: namespace, not the android: namespace. Similarly, when not using the appcompat library, you should be using the android:showAsAction attribute."

我可以通过从 build.gradle 文件中删除以下行来消除错误:

compile 'com.android.support:appcompat-v7:22.0.0'

但是,删除支持库似乎不是一个好主意(尽管我在这里可能是错的)。如果我像错误建议的那样使用 app:namespace 方法,我可以摆脱错误,但是搜索图标不会显示在操作栏上;相反,搜索选项出现在溢出菜单中。如何在不出现错误且不删除支持库的情况下正确显示搜索图标?我只是忽略错误吗?我应该坚持为我的应用程序使用 ActionBarActivity(即,是否有理由尝试将普通的 Activity 与 Action Bar 一起使用,或者我是在浪费时间)?我正在为此项目使用 Android Studio。

尝试改变

android:showAsAction="ifRoom" 

app:showAsAction="ifRoom"

首先,确保您使用的是基于 v7 库主题的应用主题。

<resources>

    <!-- Application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">

而你使用 ActionBarActivity。 Appcompat 不仅用于向后兼容,而且还弥合了最新 material UI.

的一些差距

menu.xml文件中,您需要使用app命名空间:

<?xml version="1.0" encoding="utf-8"?>
<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:ignore="AlwaysShowAction"
    >
    <item
        android:id="@+id/menu_search"
        android:menuCategory="system"
        android:icon="@drawable/ic_action_search"
        android:title="@string/search"
        app:showAsAction="always"
        />
</menu>

注意

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

app:showAsAction="always" 

它没有使用 android: 命名空间,而是 v7 库资源命名空间。

另外,android:showAsAction="ifRoom" 不保证 android 会一直显示图标。

其实三天前我遇到了同样的问题,一直在尝试网上找到的很多解决方案,但直到现在都没有奏效。按照前面的评论,我所做的一切都对我有用,粘贴在下面,希望它有效。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
        app:showAsAction="always"
  xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- Search / will display always -->
<item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"
    app:showAsAction="always"/>
</menu>

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    </style>

</resources>