【问题标题】:Using android.support.v7.widget.CardView in my project (Eclipse)在我的项目(Eclipse)中使用 android.support.v7.widget.CardView
【发布时间】:2014-06-27 10:13:22
【问题描述】:

我想使用新的 Android L 开发者预览支持库(如 here 所述)引入的新 CardView 小部件,这似乎是 v7 支持库的新修订版的一部分。

我现在已经更新了我的 SDK 版本,下载了最新的支持库包,但我仍然找不到新的 CardView 小部件。

我已经搜索了网络和官方文档,但无法获得任何关于在哪里可以获得新支持库的提示。

非常感谢任何帮助!

编辑:我正在使用 ADT/Eclipse

【问题讨论】:

  • Android 开发者网站上有一个注释,也许有帮助:如果你的编译目标是 L 开发者预览版,Eclipse ADT 插件需要 Java 7。
  • @FD_:我很好奇你为什么还在使用 Eclipse。 Android Studio 出了什么问题?
  • @dannyroa:我同时切换了;)在发布问题的时候,我不想切换,因为当时 AIDE,Android IDE 不支持新的项目结构到一个可用度数。
  • @FD_:哈哈!我希望你在 AS 的生活会更好。我的是。
  • 我不知道 CardView 需要自己的兼容性库。我认为 AppCompat 也会处理这个视图。

标签: android eclipse android-5.0-lollipop android-cardview


【解决方案1】:

使用 Gradle 或 Android Studio,尝试添加对 com.android.support:cardview-v7 的依赖项。

目前似乎没有针对cardview-v7leanback-v17palette-v7recyclerview-v7 的常规 Android 库项目。我不知道 Google 是否/何时会发布此类库项目。

【讨论】:

  • 感谢您的回答!问题是我仍在使用 ADT/Eclipse。有什么办法在那里使用它吗?
  • @FD_:目前还没有——这就是我的第二段所指的内容。我也没有在 Android 源代码库中看到这些东西,所以我们不能打包我们自己的库项目。 AAR 不能轻易转换为它们的原始库项目,因为它们包含已编译的代码,其中包含对 R 样式常量的数字引用。
  • 好的。谢谢,将使用 Android Studio 进行测试。
  • 我终于找到了办法!将 AAR 中的资源复制到 Eclipse 中的库项目中没有问题,并且由于包含的源代码保存在它们自己的 jar 中,我也可以简单地重复使用它。我已经添加了自己的答案。
  • 已添加到 android studio 中,完美运行!谢谢!
【解决方案2】:

我终于找到了在 ADT/Eclipse 中使用 CardView 的方法。其实很简单:

  1. 在 Android Studio 中创建一个新项目
  2. 按照此问题的其他答案中的说明添加 CardView 依赖项
  3. 打开ADT,新建一个包名android.support.v7.cardview的库项目
  4. 删除所有 ADT 自动创建的资源
  5. 在 Android Studio 中找到exploded-aar 文件夹并将以下文件复制到这些位置:
    • res/values/values.xml 到您的 ADT 项目中的相同位置
    • classes.jar 到你的 ADT 项目中的 libs/
    • AndroidManifest.xml 使用它来替换 ADT 中自动生成的清单
  6. 将 classes.jar 添加到构建路径并确保已导出
  7. 在要使用CardView的项目中添加对库项目的引用。您可以按照Adding libraries with resources这里提供的步骤操作:https://developer.android.com/tools/support-library/setup.html

除了必须创建一个新的 Android Studio 项目来获取 AAR 的内容之外,您还可以简单地从本地 maven 存储库中找到并解压缩 AAR。只需按照以下 Andrew Chen 提供的步骤操作即可。

请注意,CardView 库可能无法以源代码和 ADT 兼容形式提供,因为它仍然只是预览和 WIP。由于后续版本中可能会有错误修复和改进,因此保持库是最新的很重要,这很容易使用 Gradle 依赖项,但在使用上面提供的步骤时必须手动完成。

【讨论】:

  • 您的第 5 步是指 Studio。第 1 步是否应该是“在 Android Studio 中创建一个新项目”?
  • 另外,classes.jar 将编译对 R 常量的 AAR 值的引用,我看不出这种方法将如何教 Eclipse 不要更改那些 R 常量。
  • @CommonsWare 对,我更正了#1,#5 应该是对的。
  • @CommonsWare 嗯,实际上,我只是天真地尝试了复制粘贴,它奏效了。据我了解,AAPT 总是为相同的资源(包、资源类型和名称)生成相同的资源标识符,所以我假设 AAPT 会生成与 AAR 的 jar 中包含的相同的标识符。
  • 我终于有机会在一个更复杂的例子上尝试这个,mediarouter-v7,它有大量的资源。它似乎有效(我在针对 AAR 进行编译时也遇到了崩溃,并且在我的测试环境中似乎是 Play Services 和 Chromecast 之间不同步)。在我之前的研究中,我非常关注R.txt 文件,该文件列出了一堆资源 ID。我不确定它的用途,但转换 AAR-> 库项目似乎不需要它。干得好!
【解决方案3】:

你需要在你的 build.gradle 中添加这个:

dependencies {
    ...
    compile 'com.android.support:cardview-v7:+'
}

然后是Sync Project with Gradle Files。最后,您可以按照 here 的描述使用 CardView。

【讨论】:

    【解决方案4】:

    我已经完成了以下操作,它解决了与 recyclerview 相同的问题,如果它在 eclipse 项目中不起作用,您也可以将其用于其他小部件。

    • 转到 sdk\extras\android\m2repository\com\android\support\recyclerview-v7\21.0.0-rc1 目录

    • 复制 recyclerview-v7-21.0.0-rc1.aar 文件并将其重命名为 .zip

    • 解压文件,你会得到classes.jar(重命名jar文件更有意义的名字)

    • 在您的项目构建路径或 lib 目录中使用以下 jar。

    它解决了你的错误。

    编码愉快 :)

    【讨论】:

    • 如果有问题的 AAR 有资源,这将不起作用。现在,碰巧RecyclerView AAR 目前没有资源,所以这是可行的,但对于 AAR 的未来版本,这并不能保证。
    【解决方案5】:

    https://github.com/yongjhih/CardView

    一个 CardView v7 eclipse 项目。 (来自 sdk/extras/android/m2repository/com/android/support/cardview-v7)

    项目是按步骤构建的:

    cp {sdk}/extras/android/m2repository/com/android/support/cardview-v7/21.0.0-rc1/cardview-v7-21.0.0-rc1.aar cardview-v7-21.0.0-rc1.zip
    unzip cardview-v7-21.0.0-rc1.zip
    mkdir libs/
    mv classes.jar libs/cardview-v7-21.0.0-rc1.jar
    

    【讨论】:

    • 谢谢,它帮助了我。
    【解决方案6】:

    只有将这两个加在一起后,我才能解决问题:

    dependencies {
    ...
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    ...
    }
    

    在我的 build.gradle (Module:app) 文件中

    然后按立即同步按钮

    【讨论】:

      【解决方案7】:

      虽然有点隐蔽,但在official docs here 中可以在 sdk 的代码中找到该库,以及如何通过资源获取它(Eclipse 方式)

      【讨论】:

        【解决方案8】:

        发件人:https://developer.android.com/tools/support-library/setup.html#libs-with-res

        使用资源添加库 要将带有资源的支持库(例如用于操作栏的 v7 appcompat)添加到您的应用程序项目中:

        使用 Eclipse

        根据支持库代码创建库项目:

        • 确保您已使用 SDK 管理器下载了 Android 支持库。

        • 创建一个库项目并确保所需的 JAR 文件包含在项目的构建路径中:

        • 选择文件 > 导入。

        • 选择 Existing Android Code Into Workspace 并点击 Next。

        • 浏览至 SDK 安装目录,然后浏览至 Support Library 文件夹。例如,如果您要添加 appcompat 项目,请浏览到 /extras/android/support/v7/appcompat/。

        • 单击完成以导入项目。对于 v7 appcompat 项目,您现在应该会看到一个名为 android-support-v7-appcompat 的新项目。

        • 在新建的库项目中,展开 libs/ 文件夹,右键单击每个 .jar 文件并选择 Build

        • 路径 > 添加到构建路径。例如,在创建 v7 appcompat 项目时,将 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件都添加到构建路径中。

        • 右键单击库项目文件夹并选择构建路径 > 配置构建路径。

        • 在“订购和导出”选项卡中,检查您刚刚添加到构建路径的 .jar 文件,以便它们可用于依赖此库项目的项目。例如,appcompat 项目要求您同时导出 android-support-v4.jar 和 android-support-v7-appcompat.jar 文件。

        • 取消选中 Android 依赖项。

        • 单击“确定”完成更改。

        • 您现在拥有一个用于所选支持库的库项目,您可以将其用于一个或多个应用程序项目。

        • 将库添加到您的应用程序项目中:

        • 在 Project Explorer 中,右键单击您的项目并选择 Properties。

        • 在对话框左侧的类别面板中,选择 Android。

        • 在“库”窗格中,单击“添加”按钮。

        • 选择库项目并单击确定。例如,appcompat 项目应列为 android-support-v7-appcompat。

        • 在属性窗口中,单击“确定”。

        【讨论】:

          【解决方案9】:

          也许在这里添加答案有点晚了。但我认为这个答案会对后来的人,尤其是那些不想使用Android Studio的人有所帮助。

          虽然文档说 RecyclerView 和 CardView 是 v7 appcompat 库的一部分。但正如我尝试和发现的那样,RecyclerView 和 CardView 实际上依赖于 v7 appcompat 库。所以如果你想使用RecyclerView或者CardView,你需要同时添加v7 appcompat库和RecyclerView/CardView。

          参考链接here,如果你想在你的Eclipse android 项目中使用CardView,你需要将v7 appcompat 库和CardView 都导入到Eclipse 工作区,并将它们作为库项目。然后让 CardView 项目依赖于 v7 appcompat 库项目,并使你的项目依赖于 CardView 项目。

          【讨论】:

            【解决方案10】:

            只需在您的 build.gradle 项目中添加以下行

            dependencies {
                ...
                compile 'com.android.support:cardview-v7:24.0.0'
            }
            

            并将项目与 gradle 同步。

            【讨论】:

              【解决方案11】:

              我按照 FD_ 说的做了,但它在寻找“Landroid/support/v7/cardview/R$styleable;”时出现错误而崩溃了,而这不是用它编译的

              如果你真的想在 eclipse 之前使用 CardView 之前它得到它自己的库,你可以从 classes.jar 中提取类,将它们复制并粘贴到你的项目中,使用来自 Android Studio 的上面的 values.xml 和将复制的类中对 android.support.v7.R 的所有引用更改为 yourpackagename.R。这对我有用并运行

              【讨论】:

              • 你的 Eclipse 库项目有什么包名? Eclipse 库项目中自动生成的 R.java 是否包含来自 AAR 的 res/values/values.xml 文件的 标记。我最初遇到了同样的崩溃,但通过更正库项目的包名来解决它。你是如何从 jar 中提取类的?你反编译了吗?
              • 它确实有相同的名称,所以它可能只是一个怪癖,是的,它确实有正确的资源。我使用标准反编译器 (JD) 对 JAR 进行了反编译
              【解决方案12】:

              在最新的android中,我们这样实现卡片视图:

              build.gradle 文件:

              dependencies {
                  ...
                  compile 'com.android.support:cardview-v7:24.0.0'
              }
              

              在 xml 文件中它的引用为:

              <androidx.cardview.widget.CardView
              …>
              …
              </androidx.cardview.widget.CardView>
              

              这意味着它的类已更改为: androidx.cardview.widget.CardView

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-02-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-01-06
                • 1970-01-01
                相关资源
                最近更新 更多