我创建了一个小型测试应用来练习在正常的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。
答案 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>