如何在“活动”中正确显示搜索图标?

时间:2015-04-12 17:42:36

标签: android android-activity android-actionbar searchview

我创建了一个小型测试应用来练习在正常的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中会弹出错误:

&#34;使用appcompat库时,菜单资源应该引用app:namespace中的showAsAction,而不是android:namespace。同样,当不使用appcompat库时,您应该使用android:showAsAction属性。&#34;

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

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

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

3 个答案:

答案 0 :(得分:2)

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

<resources>

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

您使用ActionBarActivity。 Appcompat不仅仅是为了向后兼容,而且还为最新的材料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会始终显示图标。

答案 1 :(得分:0)

尝试更改

android:showAsAction="ifRoom" 

app:showAsAction="ifRoom"

答案 2 :(得分:0)

实际上我三天前遇到了同样的问题,一直尝试在网上找到很多解决方案,但直到现在才开始工作。通过遵循先前的评论,我所做的一切都是为了让我的工作在下面粘贴,希望它有效。

<?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>