Android 当我想使用 Holo 时,studio 切换到 appcompat

Android studio swtiches to appcompat when I want to use Holo

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

清单有:

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

和样式文件:

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

我已经尝试将该行更改为 <style name="android:Theme.Holo">,但是当我 运行 它时,这会导致应用程序崩溃。

本教程似乎是在假设 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 在我每次在项目中创建新的 activity 时停止切换回 AppCompat?

您收到的错误消息是什么?我的猜测是教程中的示例 Activity 可能 extends ActionBarActivity class。扩展上述 class 时,您必须使用 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 主题。

按照 Eugen 在评论中发布的建议,我更改了我的 类,因此它们扩展了 Activity 而不是 ActionBarActivity。

我在 android 工作室的项目中成功使用了 holo 主题。 方法如下:

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

  2. 在应用 gradle 文件的依赖项部分删除 appcompat lib 条目。

  3. 现在您只需在应用的 styles.xml 中使用 android:Theme.Holo.Light。