Github链接:https://github.com/iamdangerous/Test-Library
我正在创建一个库(名称:myLibrary),其中我为cardView添加了样式项,如下所示
<resources
xmlns:app="http://schemas.android.com/apk/res-auto">
<style name="CardLayout">
<item name="cardElevation">@dimen/test_number</item>
<item name="cardBackgroundColor">@color/red</item>
<item name="cardCornerRadius">@dimen/test_number</item>
</style >
我正在将此库集成为 AAR 文件。图书馆正在建设中。但是当我将这个库集成为模块时,我会收到这样的错误
我再次重申,您将在集成 AAR 时遇到此错误。任何帮助表示赞赏。
CardLayout不是任何类或视图,它只是我用来引用此样式的名称。请不要混淆。我在库模块
中使用下面的CardLayout样式<android.support.v7.widget.CardView
style="@style/CardLayout"
android:layout_width="100dp"
android:layout_height="100dp"/>
答案 0 :(得分:1)
问题在于您已定义属性的值,但尚未定义属性本身。
您需要在attrs.xml
文件夹下添加res
以下代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="myCardElevation" format="reference|dimension" />
<attr name="myCardBackgroundColor" format="reference|color" />
<attr name="myCardCornerRadius" format="reference|dimension" />
</resources>
您可以看到我更新了属性键,因为您使用的属性键与CardView
您的styles.xml
看起来像
<style name="CardLayout">
<item name="myCardElevation">@dimen/test_number</item>
<item name="myCardBackgroundColor">@color/red</item>
<item name="myCardCornerRadius">@dimen/test_number</item>
</style>
我也会修复这个项目,因为它正在做一些奇怪的事情,例如在库中打包一个Activity并依赖于Butterknife和Constraint Layout deps。
但是,如果您尝试覆盖CardView
本身提供的属性,则无需定义attrs.xml
,而只需向{{1}添加parent
属性标签
style
更新:随着与OP的更多讨论,更清楚的是为什么压倒一切对他不起作用。
由于AAR不捆绑 <style name="CardLayout" parent="CardView">
<item name="cardElevation">@dimen/test_number</item>
<item name="cardBackgroundColor">@color/red</item>
<item name="cardCornerRadius">@dimen/test_number</item>
</style>
文件,因此当OP在其应用程序中包含AAR时,build.gradle
的依赖性不可用。
这里有2个解决方案,
cardview
模块可以在其build.gradle中包含app
,以便在库从AAR编译时可用它
存储库{ flatDir { dirs'libs' } }
依赖{ //这是必需的,因为aar不捆绑build.gradle,即需要存在的cardview lib要被mylib覆盖 编译'com.android.support:cardview-v7:26.+' 编译(名称:'mylibrary-debug',分机:'aar') }
OP可以将它发布到一些maven存储库托管服务,例如JitPack,JCenter或Maven central,它将包含cardview
文件和POM.xml
文件,并定义了它的依赖关系。 aar
个文件。那样aar
模块不需要声明app
依赖项,而是可以传递下载。