【问题标题】:How to use ActionBarActivity with Theme.Material如何将 ActionBarActivity 与 Theme.Material 一起使用
【发布时间】:2014-08-24 02:05:17
【问题描述】:

我创建了一个针对 L 预览的新项目。 sdk 生成的启动活动扩展了 ActionBarActivity,但是,当我尝试运行准系统生成的活动时,它会引发以下异常:

  Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:110)
            at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
            at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:99)

我环顾四周,但 Theme.AppCompat.Material 似乎不存在。如何使 ActionBarActivity 能够利用新的 Material 主题?

我的 build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 'android-L'
    buildToolsVersion '20.0.0'
    defaultConfig {
        applicationId 'com.sdchang.example'
        minSdkVersion 'L'
        targetSdkVersion 'L'
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.+'
    compile 'com.mcxiaoke.volley:library:1.0.+@aar'
    compile 'com.google.code.gson:gson:2.2.+'
    compile 'com.squareup.okhttp:okhttp:2.0.+'
}

【问题讨论】:

  • 21.+ 的 Theme.AppCompat 扩展 Theme.Base.AppCompat 扩展 Theme.Platform.AppCompat 扩展 android:Theme.Material 在 21 多个设备(即 Android L)设备上。
  • 非常感谢,这解决了我的问题。您能否创建一个明确的答案?

标签: android material-design


【解决方案1】:

AppCompat v21.+ 的 Theme.AppCompat 扩展 Theme.Base.AppCompat 扩展 Theme.Platform.AppCompat 扩展 android:Theme.Material 在 21 多个设备(即 Android L)设备上,因此您无需执行任何特定操作即可获得Material 主题,如果您使用的是 AppCompat。

【讨论】:

  • 请注意,在 res/values-v21 中 SDK 生成的 styles.xml 使用 @android:Theme.Material.Light。您可能需要为此提交罚单。
  • 我遇到了完全相同的问题,我现在将尝试您提出的答案。但想指出的是,谷歌在developer.android.com/preview/material/compatibility.html 的文档确实明确表示我们应该在 values-21 文件夹中有一个单独的父主题...
  • 已确认:只需使用 AppCompat 主题,在 v21 上您将获得 Material。我正在使用 Theme.AppCompat.Light.DarkActionBar 并将其父级追溯到 v21+ 的 Theme.Material.Light.DarkActionBar。但是在模拟器中,我的操作栏实际上并不黑暗,但这毕竟是一个预览。父结构是健全的,这个答案是正确的。
  • 即使 sdk 正确地遵循文档,我个人认为当 sdk 生成一个在运行时崩溃的项目时这是一个错误。 :(
  • 为了澄清 Google 已经意识到这是一个错误,正在等待下一个版本的修复。 android-review.googlesource.com/#/c/112723
【解决方案2】:

您需要将构建gradle中的依赖更改为

compile 'com.android.support:appcompat-v7:21.+'

【讨论】:

  • 不幸的是,这不是它。 21.+已经是SDK默认生成的。
  • 你有 compileSdkVersion 'android-L' 吗?你能提供你的 gradle.build 吗?
  • 你能试试用'android-L'代替'L'吗?
【解决方案3】:

使用以下主题:

android:theme="@style/Base.V7.Theme.AppCompat" >

【讨论】:

  • 那必须是 android:theme="@style/stylename" 并且 appcompat_v7 库必须与项目链接。而在 styles.xml 中,父级必须是 parent="@style/Theme.AppCompat.Light.DarkActionBar" 或您的选择
  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
  • @ManishDubey Sure 看起来像是对我的回答。
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2023-03-13
  • 2014-09-25
  • 2016-01-30
  • 2015-12-13
相关资源
最近更新 更多