Вам необходимо использовать тему Theme.AppCompat (или потомок) с этим действием при использовании темы AppCompat.

У меня очень странная проблема с моим приложением. После обновления до новейших версий библиотек поддержки я получаю эту ошибку:

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

Здесь выбрасывается исключение:

public class MainActivity extends AppCompatActivity {
    …
    @Override
        protected void onCreate(Bundle savedInstanceState) {
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
        super.onCreate(savedInstanceState);//Exception thrown here
    }

    …

}

Странно то, что я использую тему AppCompat со всеми своими действиями: AndroidManifest.xml:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name="com.orm.SugarApp">
        <activity
            android:name="com.example.app.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
             >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    …
</application>

styles.xml:

<resources>

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

        <!--   your app branding color for the app bar -->
        <item name="colorPrimary">@color/primary</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="colorAccent">@color/accent</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <item name="windowActionBarOverlay">true</item>

    </style>

    <style name="MyActionBar"
        parent="Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:icon">@drawable/ic_launcher</item>
        <item name="icon">@drawable/ic_launcher</item>

    </style>

    <style name="MyActionBarTabText" parent="Widget.AppCompat.ActionBar.TabText">
        <item name="textAllCaps">false</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:textSize">16sp</item>
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
    </style>

    <style name="menu_labels_style">
        <item name="android:background">@drawable/fab_label_background</item>
        <item name="android:textColor">@color/white</item>
    </style>
</resources>

Почему тогда выбрасывается это исключение?

ИЗМЕНИТЬ:

v21/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="android:colorPrimary">@color/primary_lolipop</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="android:colorAccent">@color/accent</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:colorButtonNormal">@color/accent</item>
        <item name="android:textColorAlertDialogListItem">@color/accent</item>

        <item name="android:navigationBarColor">@color/navbar</item>
        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <item name="android:windowActionBarOverlay">true</item>

        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>

person fragon    schedule 10.05.2015    source источник
comment
см. stackoverflow.com/questions/29062658/ и stackoverflow.com/questions/21386077/. (добавьте Base. перед стилем, например Base.Theme.AppCompat.Light.DarkActionBar)   -  person AsfK    schedule 10.05.2015
comment
@AsfK Эта ссылка мне совсем не помогла.   -  person fragon    schedule 10.05.2015
comment
Вы уверены, что в values-v14,v-21.... нет других стилей.xml?   -  person Gabriele Mariotti    schedule 10.05.2015
comment
@GabrieleMariotti Есть только один - в папке v21 (я добавил его код в свой вопрос). Но я получаю эту ошибку на устройстве с ОС v19. Так что я не думаю, что проблема отсюда, потому что v-21 в таком случае не используется.   -  person fragon    schedule 10.05.2015
comment
Переместите файл styles.xml только в папку res/values/. Удалите файл styles.xml в values-v21.   -  person Gabriele Mariotti    schedule 10.05.2015
comment
@GabrieleMariotti Но styles.xml помещается в папку res/values/. Почему я должен удалять values-v21?   -  person fragon    schedule 10.05.2015
comment
@6franek Я не понял вашего комментария только к 1 стилю. Извини   -  person Gabriele Mariotti    schedule 10.05.2015
comment
@GabrieleMariotti Это моя вина. Я был недостаточно точен. Я имел в виду: один дополнительный стиль, но не написал это достаточно явно.   -  person fragon    schedule 10.05.2015


Ответы (1)


У меня такая же проблема, когда я перехожу на androidx. Я решил это, просто обновив с

implementation 'androidx.appcompat:appcompat:1.0.0'

to

implementation 'androidx.appcompat:appcompat:1.0.2'
person Axbor Axrorov    schedule 12.12.2018