我有一个奇怪的问题,我在我的Android应用程序中使用了一个menu.xml文件,如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:compat="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:title="@string/action_refresh"
android:icon="@drawable/toc"
compat:showAsAction="always"/>
</menu>
并且它运行良好,但是几天前我正在将我的eclipse更新到最后一个版本,之后,app:showAsAction =&#34; always&#34;显示错误:
不使用appcompat库时应该使用android:showAsAction 之后,我的操作栏图标被移动到溢出栏,而根本没有显示在操作栏中。
无论如何,appcompat库是我的基本样式的父级。 我该怎么做才能解决这个问题?
答案 0 :(得分:18)
你需要做三件事 -
将这三件事xmlns:tools="schemas.android.com/tools"
tools:context="com.example.sample.YourActivity" xmlns:yourapp="http://schemas.android.com/apk/res-auto"
添加到您的<menu>
代码
以及通常的xmlns:android="http://schemas.android.com/apk/res/android"
将yourapp:showAsAction="ifRoom"
添加到<item>
。
最后,通过Project清除您的项目 - &gt;清洁...
最后一步是为我解决了这个问题。简单地清理项目(有时它们会变脏)
这是最终代码的样子:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="schemas.android.com/tools"
tools:context="com.example.sample.YourActivity"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_share"
android:orderInCategory="100"
android:title="Share"
android:icon="@drawable/ic_share_white"
yourapp:showAsAction="ifRoom" />
</menu>
答案 1 :(得分:14)
这适用于我,我使用了appcompatlibrary:
compat:showAsAction="always"
而不是:
app:showAsAction="always"
并使用compat:showAsAction =&#34; always&#34; , 里面的menu.xml包含以下行:
<menu
......
<!-- include the below line -->
xmlns:compat="http://schemas.android.com/apk/res-auto" >
答案 2 :(得分:5)
面临同样的问题。这两个选项对我有用:
1.Including - xmlns:compat =“http://schemas.android.com/apk/res-auto”&gt;然后使用:“compat:showAsAction =”ifRoom“/&gt;”
2.不包括compat,只需使用:app:showAsAction =“ifRoom”/&gt;
PS:使用Android Studio。
答案 3 :(得分:1)
我在多模块Gradle项目中遇到了同样的问题。据Android Lint CLI报道。
我的模块如下:
feature_home
是AppCompat
模块,其菜单类似于:
<?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">
<item
android:id="@+id/edit"
android:icon="@drawable/ic_edit"
android:title="@string/edit"
app:showAsAction="always" />
</menu>
我想用一个./gradlew
命令为整个应用程序运行Android Lint,所以我在app/build.gradle
上添加了以下lint选项:
lintOptions {
checkDependencies true
}
然后,当我运行./gradlew :feature_home:lint
时,一切都很好,但是当我尝试通过./gradlew :app:lint
检查所有模块时,遇到了主题问题:Error: Should use android:showAsAction when not using the appcompat library
。
问题是由于我的app
模块不是AppCompat
引起的。因此,将AppCompat
依赖项添加到app/build.gradle
可以解决此问题:
implementation "androidx.appcompat:appcompat:$appcompat_version"
答案 4 :(得分:0)
不使用appcompat库时应该使用android:showAsAction
问题:确保菜单项使用正确的命名空间 Id:AppCompatResource
使用appcompat库时,菜单资源应该引用app:namespace中的showAsAction,而不是android:namespace。
同样,当不使用appcompat库时,你应该使用android:showAsAction属性。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:compat="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:title="@string/action_refresh"
android:icon="@drawable/toc"
tools:ignore="AppCompatResource"
compat:showAsAction="always"/>
</menu>
答案 5 :(得分:0)
您需要做的就是将以下行添加到item
元素以取消警告。将名称空间设为compat
vs app
"http://schemas.android.com/apk/res-auto"
实际上并没有做任何特别的事情。
tools:ignore="AppCompatResource"
完整代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:compat="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:title="@string/action_refresh"
android:icon="@drawable/toc"
tools:ignore="AppCompatResource"
compat:showAsAction="always"/>
</menu>
注意:compat
标记可以是app
或您想要的任何内容。