【问题标题】:Android ActionBarCompat libraryAndroid ActionBarCompat 库
【发布时间】:2014-07-03 02:59:22
【问题描述】:

我在使用昨天发布的 ActionBarCompat 支持库时遇到了问题。正如 Chris Banes 在 DevBytes - https://www.youtube.com/watch?v=6TGgYqfJnyc 中指出的那样,我已经更新了支持存储库并在 build.gradle 中包含了 appcompat-v7 存储库的路径。

dependencies {
compile ('com.android.support:support-v4:18.0.+')
compile ('com.android.support:appcompat-v7:18.0.+')}

构建顺利,我可以使用这个库中的 ActionBarActivity 等类,但我不能使用样式和任何资源,所以我不能使用以下主题 - @style/Theme.AppCompat 等。我在想我会找到源文件在 .../sdk/extras/android/.../"supportrepo" 所以我会像 gradle 的 ActionBarSherlock 一样引用它,但这似乎不是正确的答案。

我做错了什么?谢谢。

【问题讨论】:

  • 其实我在 sdk/extras/android/support/v7/appcompat 文件夹中找到了这些资源。但它们似乎没有在支持存储库中被引用。
  • 我遇到了同样的问题。有这个文档:developer.android.com/tools/support-library/… 如果您查看“使用资源添加库”的部分,它会说:“将支持库功能项目标识符添加到依赖项部分。例如,要包含 appcompat 项目添加编译“com.android.support:appcompat-v7:18.0.+”到依赖项部分,如下例所示:“这正是我所做的(看起来你也这样做了)。所以,我不确定问题是什么。

标签: android android-studio android-actionbar-compat


【解决方案1】:

我正在使用 Android Studio,我的 values/styles.xml 中也有同样的 res-resolving 问题。

它说它无法解析 @style/Theme.AppCompat.Light,但在编译时 (gradle) 和运行时一切正常(Android 2.3.3 和 4.3)。 p>

我想去掉 res 无法解析的警告。

我如何告诉 Android Studio 这个资源可以在 appcompat-v7 存储库中找到?
(这个问题与错误有关在已经修复的 Android Studio 中。)


下面你看看我做了什么。我希望这将有所帮助。欢迎提出建议。
appcompat 库的源代码可以在 github 上找到。

Gradle 集成:

dependencies {
    ...
    compile group:'com.android.support', name:'appcompat-v7', version:'18.0.+'
    ...
}

样式文件:

值/样式.xml:

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/ActionBar.Solid.Custom</item>
    </style>

    <style name="ActionBar.Solid.Custom" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="background">@drawable/ab_solid_custom</item>
        <item name="displayOptions">homeAsUp|showHome|showCustom</item>
    </style>

</resources>

values-v14/styles.xml:

<resources>

    <!--
        Base application theme for API 14+. This theme completely replaces
        AppBaseTheme from BOTH res/values/styles.xml and
        res/values-v11/styles.xml on API 14+ devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        <!-- API 14 theme customizations can go here. -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBar.Solid.Custom</item>
    </style>

    <style name="ActionBar.Solid.Custom" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
        <item name="android:background">@drawable/ab_solid_custom</item>
        <item name="android:displayOptions">homeAsUp|showHome|showCustom</item>
    </style>

</resources>

MainActivity (只有extend是强制性的)

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Views.inject(this);

        setupNavigationDrawer();
    }
}

AndroidManifest.xml (必须设置 android:theme)

    <activity
            android:name="com.example.app.MainActivity"
            android:theme="@style/AppTheme"
            android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

【讨论】:

  • 诀窍在哪里?也许我看不到,但在我看来就像正常设置。谢谢。
  • 没有诀窍。你不需要技巧。我发布了这个,所以你可能会发现你犯了一个错误。
  • 反响很好。解决了 Theme.AppCompat 未解决的问题。 +1
  • 顶部的粗体部分是您要问的单独问题,还是标题,休息后的部分是解决方案?
  • 这是一个单独的问题,与 Android Studio 中已修复的错误有关。 ~~ 我是通过帖子更新的。
【解决方案2】:

有一个已知错误 (http://code.google.com/p/android/issues/detail?id=56312),Android Studio IDE 会将样式标记为红色(该错误是针对 ActionBarSherlock,但问题在于包含样式的 aar 并且该 aar 的源不是对 Android Studio 可见)。

具体来说,评论 #8 (http://code.google.com/p/android/issues/detail?id=56312#c4) 显示了观察到的行为,评论 #10 (http://code.google.com/p/android/issues/detail?id=56312#c10) 指出布局编辑器是固定的,但代码编辑器不是。

因此,程序应该可以正常构建和运行,只需在 XML 样式编辑器中查看时将样式显示为红色。

【讨论】:

【解决方案3】:

我还没有尝试过 Gradle,所以我不确定,但您似乎还需要将资源复制到您的项目中。它包含 Theme.AppCompat。

我通过以下步骤在 Eclipse 中获得了成功。

从下面的路径导入android-support-v7-appcompat作为一个libray项目。(你可能已经将sdk保存在不同的路径上)

D:\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\extras\android\support\v7

我刚刚将这个库添加到我的项目中,并且开箱即用。

【讨论】:

  • 是的,我们同时发布。 :) 所以它不像视频中所说的那样在 build.gradle 文件中添加一行那么简单......
  • @Michal 我还是 Gradle 的新手。因为它是库项目,您可以按照与导入其他库项目时相同的步骤进行操作。
  • 谢谢你,维普尔。这是你可以做到的方式。在 android studio 中,您将现有模块导入项目,相应地设置 Gradle 文件,一切顺利。但这与导入 ActionBarSherlock 或任何其他模块并没有什么不同,所以我有点失望。
  • 在 Eclipse 中,由于未知原因,这对我不起作用。 v7-appcompat 作为库导入并按照 google dev 文档中的说明进行设置。引用该库时,我收到一个错误,并且它的内容在我的项目中不可用。不知道该尝试更多...
【解决方案4】:

我还在 build.gradle 文件的依赖项部分添加了相同的 2 行。编译开始工作,但出现运行时错误。然后我发现了 Tools > Android > Sync Project with Gradle Files 选项。这似乎奏效了。 (我在 Android Studio 0.2.9 上)

【讨论】:

  • 我在 Gradle 中声明了所有依赖项,这解决了 Android Studio 呈现的“红色”问题。谢谢!
【解决方案5】:

就我而言,Latest Studio 0.8.1

创建新项目并将 Style 设置为 AppTheme。然后崩溃。

我的解决方案:

File -> Project Structure -> Dependicies -> + (plus) -> 选择 appcompact, support, ....

并且错误已修复。

谢谢。

【讨论】:

    【解决方案6】:

    参见https://plus.google.com/113735310430199015092/posts/ef5LyGyMddy

    大卫·范德文

    除非有人忘记更新支持存储库,所以任何人 尝试使用 android studio 时,他们的 gradle 构建会中断 使用新的支持库。

    罗曼努里克

    +David Van de Ven 我们正在努力解决这个问题。

    【讨论】:

    • 那么问题就来了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多