不使用appcompat库时应使用android:showAsAction

不使用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

我有一个奇怪的问题,我在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=“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
    vs
    app
    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”