Невозможно использовать android:Theme.Material в 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>


Мой файл градиента (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.
  • Измените на «Theme.AppCompat» в values-v21/styles.xml.


Должен ли я расширить «android.app.Activity», если я хочу использовать тему дизайна?

Или есть другой способ использовать тему дизайна материалов?

Спасибо.


person cmingmai    schedule 30.12.2016    source источник
comment
Android L может использовать Theme.Meterial, если вы используете AppComatActivity. Просто используйте Theme.AppCompat.   -  person Fang    schedule 30.12.2016
comment
В какой ситуации будет использоваться android:Theme.Material?   -  person cmingmai    schedule 30.12.2016
comment
minSdkVersion — 21   -  person Fang    schedule 03.01.2017


Ответы (4)


Напишите приведенную ниже тему в файле style.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>

и напишите расширяет AppCompatActivity в вашем `MainActivity

и в файле Manifest.xml напишите свой тег приложения, как показано ниже:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppBaseTheme">
</application>
person santoshnisal007    schedule 30.12.2016
comment
Так что вообще не нужно использовать android:Theme.Material? - person cmingmai; 30.12.2016
comment
Да, нет необходимости использовать android:Theme.Material. Это будет обработано автоматически. - person santoshnisal007; 30.12.2016
comment
Спасибо за помощь :) - person cmingmai; 30.12.2016

Замените тему ниже в файле 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>

And use extends AppCompatActivity in your MainActivity.

И, наконец, используйте эту тему в файле манифеста.

   <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' 
      } 

Отредактируйте мою тему, как хотите. Надеюсь, это поможет...

person Sagar Aghara    schedule 30.12.2016
comment
пожалуйста, предоставьте также свой файл gradle - person Yogesh Borhade; 30.12.2016
comment
Так что вообще не нужно использовать android:Theme.Material? Просто используйте Theme.AppCompat? - person cmingmai; 30.12.2016
comment
Спасибо за помощь :) - person cmingmai; 30.12.2016
comment
да всегда бро...(: - person Sagar Aghara; 31.12.2016
comment
Отличный способ использовать как материал, так и appcompat - person Pants; 12.08.2018

Попробуй это:

<resources>
    <style name="AppTheme" parent="parent="Theme.AppCompat.Light"></style>
</resources>
person Govinda Paliwal    schedule 30.12.2016

Попробуйте это 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, используя приведенный ниже код

добавьте 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'



}
person Yogesh Borhade    schedule 30.12.2016