安卓ActionBarCompat库

13

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

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文件夹中找到了这些资源。但是它们似乎没有被引用在支持库中。 - Michal
1
我也遇到了完全相同的问题。有这个文档:http://developer.android.com/tools/support-library/setup.html#add-library如果你看一下“添加带资源的库”部分,它说:“将支持库特性项目标识符添加到依赖项部分。例如,要包括appcompat项目,请将compile“com.android.support:appcompat-v7:18.0.+”添加到依赖项部分,如下面的示例所示:”这正是我所做的(看起来你也是)。所以,我不确定问题出在哪里。 - ariets
6个回答

9
我正在使用Android Studio,我的values/styles.xml中出现了与资源相关的问题。它说无法解析@style/Theme.AppCompat.Light,但在编译时(gradle)和运行时(Android 2.3.3和4.3)一切都正常。我想要消除这个资源无法解析的警告。

以下是我的操作步骤。希望这可以帮到你,欢迎提出建议。
appcompat库的源代码可以在github上找到。

Gradle集成:

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

样式文件:

values/styles.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 (只有扩展是强制性的):

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>

哪里有诀窍?也许我看不到,但对我来说它似乎是正常的设置。谢谢。 - Michal
没有什么诀窍。你不需要任何诀窍。我发布这个是为了让你找到可能犯的错误。 - Helden
很好的回应。已解决Theme.AppCompat未解决的问题。+1 - speedynomads
粗体字部分在顶部是你要问的另一个问题,还是一个标题,在分界线后面的部分是解决方案? - ataulm
这是一个单独的问题,与Android Studio中已经修复的错误有关。我已更新我的帖子。 - Helden

7

已知一个错误(http://code.google.com/p/android/issues/detail?id=56312),Android Studio IDE会将样式标记为红色(该错误与ActionBarSherlock有关,但问题是由于包含样式的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样式编辑器中查看时,将以红色显示样式。


谢谢,这就是我的回复的答案。 - Helden
Android Studio 0.2.7已经发布。此版本应该修复了这个错误。http://tools.android.com/recent/androidstudio027released - Michal
1
错误似乎仍然存在于0.4.4版本中。风格正确,但被标记为红色。 - theblang

2

在我的情况下,最新的Studio版本是0.8.1

创建新项目并将样式设置为AppTheme,然后崩溃了。

我的解决方案:

文件 -> 项目结构 -> 依赖项 -> +(加号) -> 选择appcompact、support等...

这样就可以修复错误了。

谢谢。


2
我还没有尝试过Gradle,所以我不确定,但似乎您也需要将资源复制到项目中。它包含Theme.AppCompat。
我通过以下步骤在Eclipse中成功了:
从下面的路径导入android-support-v7-appcompat作为库项目。(您可能已将sdk保存在不同的路径上)
D:\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\extras\android\support\v7
然后将此库添加到我的项目中,一切都很顺利。

是的,我们同时发布它。 :) 因此,它并不像视频中所说的那样简单,只需将一行添加到build.gradle文件中... - Michal
@Michal,我在Gradle方面仍然是个新手。由于这是一个库项目,您可以按照导入其他库项目时的相同步骤进行操作。 - Vipul
谢谢,Vipul。这是你可以做到的方式。在Android Studio中,您将现有模块导入项目,相应地设置Gradle文件,然后就可以开始使用了。但这与导入ActionBarSherlock或任何其他模块没有什么区别,所以我有点失望。 - Michal
1
在Eclipse中,由于未知原因,这对我不起作用。v7-appcompat被导入为库,并按照Google开发文档中的说明进行设置。当引用该库时,我会收到一个错误,并且其内容在我的项目中不可用。不知道还有什么尝试的方法... - Aux

2

我也在build.gradle文件的依赖部分添加了相同的两行代码。编译开始工作,但是我遇到了运行时错误。然后我发现了选项Tools > Android > Sync Project with Gradle Files。这似乎解决了问题。(我使用的是Android Studio 0.2.9)


我在Gradle中声明了所有依赖项,这解决了Android Studio呈现的“红色”问题。谢谢! - Clocker

0

所以这就是问题的所在。 :) - Michal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接