Android无法解析符号'?attr/selectableItemBackground'

Jun*_*711 54 android android-xml

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/card_outer_padding"
    android:layout_marginTop="@dimen/card_outer_padding"
    android:layout_marginRight="@dimen/card_outer_padding"
    android:layout_marginBottom='@{model.cardBottomMargin}'
    android:foreground="?attr/selectableItemBackground"
    android:onClick="@{model::onCardClick}"
    app:cardElevation="2dp"
    app:cardCornerRadius="2dp"
    app:cardUseCompatPadding="true">
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

无法解析符号?attr/selectableItemBackground 验证Android XML文件中的资源引用.

<TextView
    android:id="@+id/country_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="40dp"
    android:text="@{model.name}"
    style="@style/TextAppearance.AppCompat.Headline"
    tools:text="Country"/>
Run Code Online (Sandbox Code Playgroud)

而且,我也遇到了类似的错误

无法解析符号'@ style/TextAppearance.AppCompat.Headline'
验证Android XML文件中的资源引用.

任何指针都会很棒!谢谢!它似乎与此线程有关,但没有提供解决方案:

woo*_*etm 143

我相信这是IDE和Android Gradle插件的通信问题.在任何情况下,我的唯一方法可靠地找到解决这是删除有问题的库.idea/libraries/的文件夹.

所以,对你来说,因为棉绒检查无法识别 ?attr/selectableItemBackground

  1. 找到Gradle__com_android_support_xxx.xml文件
  2. 删除这些文件
  3. 带文件系统的SYNC IDE
  4. 带Gradle文件的SYNC项目
  5. 重建您的项目

您可以通过单击工具栏顶部的"文件"并选择"与文件系统同步",然后选择"使用gradle文件同步项目"来同步.

我尝试过其他建议的解决方案 - appcompat-v7在我的模块build.gradle文件和google()存储库中依赖项目build.gradle依赖项中的第一行.纳达.

这些解决方案也没有帮助......

  • 使缓存无效/重新启动不起作用.
  • 清理/重建项目.

  • 我对`?attr/colorPrimary`有类似的问题,但是因为删除`Gradle__com_android_support_xxx.xml`,其中xxx是版本号对我不起作用,我只删除以`Gradle__com_android_support_`开头的所有文件并且它有效. (8认同)
  • 我找不到Gradle__com_android_support_xxx.xml (2认同)

V.Y*_*.Y. 44

对于版本Lollipop和更高版本使用此:

android:foreground="?android:attr/selectableItemBackground"
Run Code Online (Sandbox Code Playgroud)

对于Pre-Lollipop使用这样的:

android:foreground="?attr/selectableItemBackground"
Run Code Online (Sandbox Code Playgroud)

  • 这在大多数时候都不是正确的解决方案.我请你们向读者解释一下有什么不同之处,为什么一个人可能会工作而另一个人可能没有,以及每个选择的含义是什么.如果您知道这一点,那么您不可能告诉人们在这种情况下,解决方案是将"android"添加到属性中. (7认同)
  • 这不是最好的解决方案,因为它会强制前台成为平台指定的任何内容.因此,在Android 4.0上,这将是一个全息主题的`selectableItemBackground`.大多数人都想使用AppCompat定义的资源,这需要你删除`android`前缀. (2认同)

Her*_*gon 9

2个选项:

选项1

另一个可能的原因是:没有为构建脚本设置Google的maven存储库.

打开项目的主build.gradle添加以下行:

buildscript {
    repositories {
        google()  <-- this
        // Be also sure that google() is before jcenter()
    }
}
Run Code Online (Sandbox Code Playgroud)

没有它,它可能无法下载Android Studio Gradle插件3.0+.它不是在jCenter中分发,而是在Google的maven存储库中分发.

选项2

在项目和重新同步项目的根目录中运行此命令

Linux的:

rm .idea/libraries/Gradle__com_android_support_*.xml

视窗:

del .idea\libraries\Gradle__com_android_support_*.xml


tyn*_*ynn 3

这两个资源都是使用 Android 支持库定义的,并且由于无法解析这些符号,因此您似乎缺少定义支持依赖项。

dependencies {
    compile "com.android.support:appcompat-v7:$androidSupportVersion"
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为您不应该对这个库使用“编译”。应该是“执行”。 (2认同)