【问题标题】:Android studio swtiches to appcompat when I want to use Holo当我想使用 Holo 时,Android Studio 切换到 appcompat
【发布时间】:2015-06-16 02:36:24
【问题描述】:

我正在开发 developer.android.com 上的介绍教程,并希望看到我的应用使用 Holo 主题。不幸的是,Android Studio 不断将应用改回 Theme.AppCompat.Light.DarkActionBar 主题。该应用程序有两个活动。第一个有一个 EditText 和一个按钮,第二个活动只显示一个 TextView。在添加第二个活动之前,我可以通过打开第一个活动的 .xml,单击“预览”,然后从预览窗格顶部选择 Holo 主题,将 Holo 主题应用于第一个活动。这工作正常。然后我创建了第二个活动,并做了同样的事情,但现在当我运行应用程序时,它没有使用 Holo 主题。

清单有:

<application
    ...
    android:theme="@style/AppTheme" >

和样式文件:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

我尝试将该行更改为 &lt;style name="android:Theme.Holo"&gt;,但这会导致应用在运行时崩溃。

本教程似乎是假设 Android Studio 的默认 Hello World 活动将默认为 Holo,但事实并非如此。我不认为这是因为我试图支持的版本:

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.example.me.myfirstapp"
    minSdkVersion 16
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}

所以我的问题是双重的。如何让应用使用 Holo 主题运行,以及如何让 Android Studio 在我每次在项目中创建新活动时停止切换回 AppCompat?

【问题讨论】:

  • 您可以使用 holo,但只能在 API >= 14 上使用。您的活动必须扩展 Activity 而不是 ActionBarActivity
  • @EugenPechanec 因为 minSdkVersion 是 16,我不适合使用 Holo 吗?我不明白你对 API 14 的评论。另外,你能解释一下为什么我需要扩展 Activity 而不是 ActionBarActivity 吗?当我在Android Studio中进入New>Activity>Blank Activity时,它选择了ActionBarActivity,如果我真的必须直接扩展Activity,有没有办法改变这个默认行为?
  • 您可以尝试从依赖项中删除 appcompat-v7,然后创建一个新活动。但我怀疑它最终会和现在一样。恕我直言,您最好自己创建空 Java 类(结束编写 extends 子句)和 xml 布局。

标签: android android-theme


【解决方案1】:

按照在 cmets 中发布的 Eugen 的建议,我更改了我的类,以便它们扩展 Activity 而不是 ActionBarActivity。

【讨论】:

    【解决方案2】:

    您收到的错误消息是什么?我的猜测是教程中的示例Activity 可能是extends ActionBarActivity 类。在扩展上述类时,您必须使用AppCompat 主题(或后代),否则应用程序将崩溃,您将收到如下错误:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myApp/com.example.myApp.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
    

    这是个坏消息。好消息是您尝试在示例中使用的Theme.Holo 在美学上与Theme.AppCompat 相同。所以简单地改变:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    

    到:

    <style name="AppTheme" parent="Theme.AppCompat">
    

    它看起来好像你已经实现了Theme.Holo 主题。

    【讨论】:

    • AppCompat 与 Holo 相同,仅适用于 appcompat-v7 20.0.x。从 21.0.x 开始,它使用 Material 主题。
    • 有什么理由我不想只扩展 Activity 而不是扩展 ActionBarActivity?我的 minSdkVersion 是 16,那么通过扩展 Activity 而不是 ActionBarActivity 我会失去任何功能吗?
    • 我不太明白为什么使用 Holo 曾经如此简单,而现在却很难。这很难复制,因为添加了这个 AppCompat 库。当不需要时,这会使情况复杂化。
    【解决方案3】:

    我在 android studio 的项目中成功使用了全息主题。 方法如下:

    1. 在app gradle中,使minSdk、compilesdk和targetsdkversion相同(以防止出现提示appcompat库的回退行为的必要性)

    2. 删除 app gradle 文件中依赖项部分的 appcompat lib 条目。

    3. 现在您可以在应用的 styles.xml 中简单地使用 android:Theme.Holo.Light。

    【讨论】:

    • 另外别忘了用Activity替换ActionBarActivity。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多