无法集成具有自定义样式

时间:2017-10-11 14:10:06

标签: android

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 文件。图书馆正在建设中。但是当我将这个库集成为模块时,我会收到这样的错误 Style issue

我再次重申,您将在集成 AAR 时遇到此错误。任何帮助表示赞赏。

CardLayout不是任何类或视图,它只是我用来引用此样式的名称。请不要混淆。我在库模块

中使用下面的CardLayout样式
<android.support.v7.widget.CardView
    style="@style/CardLayout"
    android:layout_width="100dp"
    android:layout_height="100dp"/>

enter image description here

1 个答案:

答案 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个解决方案,

  1. cardview模块可以在其build.gradle中包含app,以便在库从AAR编译时可用它

    存储库{    flatDir {       dirs'libs'    } }

    依赖{    //这是必需的,因为aar不捆绑build.gradle,即需要存在的cardview lib要被mylib覆盖    编译'com.android.support:cardview-v7:26.+'    编译(名称:'mylibrary-debug',分机:'aar') }

  2. OP可以将它发布到一些maven存储库托管服务,例如JitPack,JCenter或Maven central,它将包含cardview文件和POM.xml文件,并定义了它的依赖关系。 aar个文件。那样aar模块不需要声明app依赖项,而是可以传递下载。