不使用appcompat库时应使用android:showAsAction
我有一个奇怪的问题,我在android应用程序中使用了一个menu.xml文件,如下所示:不使用appcompat库时应使用android:showAsAction,android,eclipse,android-actionbar,android-appcompat,Android,Eclipse,Android Actionbar,Android Appcompat,我有一个奇怪的问题,我在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:ord
<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=“always”显示错误:
不使用appcompat库时应使用android:showAsAction 在那之后,我的动作栏图标被移到了溢出栏,在动作栏中根本没有显示 无论如何,appcompat库是我的基本样式的父级。
我应该怎么做才能解决这个问题?这对我来说很有效我使用了appcompatlibrary:
compat:showAsAction="always"
而不是:
app:showAsAction="always"
并使用compat:showAsAction=“始终”,
incide menu.xml包含以下行:
<menu
......
<!-- include the below line -->
xmlns:compat="http://schemas.android.com/apk/res-auto" >
面临同样的问题。这两个选项对我很有用:
1.包括-xmlns:compat=”http://schemas.android.com/apk/res-auto“>然后使用:“compat:showAsAction=“ifRoom”/>”
2.不包括compat,只需使用:app:showAsAction=“ifRoom”/
PS:使用Android Studio。你需要做三件事-
添加这三件事xmlns:tools=“schemas.android.com/tools”
工具:context=“com.example.sample.YourActivity”xmlns:yourapp=”http://schemas.android.com/apk/res-auto“
到您的
标签
以及通常的xmlns:android=”http://schemas.android.com/apk/res/android“
将yourapp:showAsAction=“ifRoom”
添加到您的
中
最后,通过project->clean清理您的项目
最后一步是什么解决了它为我。简单地清理项目(有时会弄得很脏)
这是最终代码的样子:
<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>
不使用appcompat库时应使用android:showAsAction
问题:确保菜单项使用正确的命名空间
Id:AppCompatResource
当使用appcompat库时,菜单资源应该引用app:namespace中的showAsAction,而不是android:namespace
类似地,当不使用appcompat库时,应该使用android:showaAction属性
<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>
您只需将以下行添加到项
元素中,即可取消显示警告。名称空间为compat
vsapp
for”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
或任何你想要的东西。我在我的多模块Gradle项目中遇到了同样的问题。这是由Android Lint CLI报告的
问题的环境
我的模块看起来像:
feature\u home
是一个AppCompat
模块,其菜单如下:
我想用一个/gradlew
命令为整个应用程序运行Android Lint,因此我在app/build.gradle
中添加了以下Lint选项:
lint选项{
检查依赖项是否为真
}
然后,当我运行/gradlew:feature\u home:lint
时,一切正常,但当我试图通过/gradlew:app:lint
检查所有模块时,我遇到了一个主题问题:错误:不使用appcompat库时应该使用android:showAsAction
解决方案
问题是由于我的app
模块不是AppCompat
。因此,将AppCompat
依赖项添加到app/build.gradle
解决了这个问题:
实现“androidx.appcompat:appcompat:$appcompat\u版本”
谢谢,但不是答案,compat是memenu无法识别的名称空间。xml文件必须包含。。。同样的错误:当不使用appcompat库时,应该使用android:showAsAction,这让我很困惑,我已经删除了很多文档,所有这些文档都在谈论添加MyApp名称空间,如您所述,但它不适用于meshow your full menu.xml,您是否仅使用ActionBarActivity或ActionBar?我发现,要消除错误,我只需要执行Project/Clea/myProjName。但是,如果我再次编辑xml,将返回错误,因此我必须重新清理。使用xmlns:tools=”http://schemas.android.com/tools“
而不是xmlns:tools=“schemas.android.com/tools”