无法在AppCompatActivity中使用android:Theme.Material

时间:2016-12-30 09:04:18

标签: android android-appcompat android-theme appcompatactivity

首先,我创建了两个样式,一个是值,另一个是值-21。

在values / styles.xml中是

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

在values-v21 / styles.xml中

<resources>
    <style name="AppTheme" parent="android:Theme.Material"></style>
</resources>


我的gradle文件(app.gradle)

gradle pic1 gradle pic2


由于ActionBarActivity已弃用,因此我使用AppCompatActivity

当我设置这两个样式值并在AppCompatActivity中扩展MainActivity时,我得到了例外:

java.lang.IllegalStateException: You need to use a Theme.AppCompat
theme (or descendant) with this activity.

我做了两个不同的更改,而且异常再也没有出现过:

  • 扩展“android.app.Activity”而不是v7.AppCompatActivity。
  • 在values-v21 / styles.xml中更改为“Theme.AppCompat”。


如果我想使用设计主题,我应该扩展“android.app.Activity”吗?

或者,是否有另一种使用材料设计主题的方法?

感谢。

4 个答案:

答案 0 :(得分:3)

styles.xml文件中替换以下主题。

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="MyMaterialTheme" parent="MyMaterialTheme.Base">
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
    </style>

    <style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

并使用在MainActivity中扩展AppCompatActivity。

最后在Manifestfile中使用此主题。

   <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/MyMaterialTheme">
    </application>

Gradle文件依赖项。

    dependencies 
        {
         compile fileTree(dir: 'libs', include: ['*.jar']) compile 

'com.android.support:appcompat-v7:23.3.0' compile 

'com.android.support:recyclerview-v7:23.1.1' compile 

'com.android.support:cardview-v7:23.2.1' // For NavigationView Using Menu 

'compile 'com.android.support:design:23.3.0' // For Google Map compile 

'com.google.android.gms:play-services-maps:9.8.0' 
      } 

根据需要编辑我的主题。 希望它能帮助......

答案 1 :(得分:2)

在style.xml文件中写下以下主题。

green

并在您的`MainActivity

中编写扩展AppCompatActivity

并在Manifest.xml文件中编写您的应用程序标记,如下所示:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">any_color_code</item>
    <item name="colorPrimaryDark">any_color_codek</item>
    <item name="colorAccent">any_color_code</item>
</style>

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:0)

试试这个 style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">
        <item name="colorControlNormal">@color/colorRadioon</item>
        <item name="colorControlActivated">@color/colorRadioof</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

style.xml(第21版)

<resources>>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

使用以下代码更新您的Gradle文件

在您的gradle中添加aaptOption

aaptOptions {
        additionalParameters "--no-version-vectors"
    }

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"


    defaultConfig {
        applicationId "com.jmtechnologies.askuscash"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        javaMaxHeapSize "2g"
    }

    // important to run code on kitkat

    aaptOptions {
        additionalParameters "--no-version-vectors"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    // multidex
    compile 'com.android.support:multidex:1.0.0'


    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:design:25.1.0'
    compile 'com.android.support:recyclerview-v7:25.1.0'



}