如何在 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>
我创建了一个小型测试应用程序来练习在正常 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>