Вам нужно использовать тему.Тема AppCompat (или потомок) с этим действием

Android Studio 0.4.5

Android документация для создания пользовательских диалоговых окон:http://developer.android.com/guide/topics/ui/dialogs.html

если вы хотите пользовательский диалог, Вы можете вместо этого отобразить действие в виде диалога вместо использования диалоговых API. Просто создайте действие и установите его тему на тему.Голографический.Диалог в the <activity> манифест элемента:

<activity android:theme="@android:style/Theme.Holo.Dialog" >

однако, когда я попробовал это, я получаю следующее исключение:

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

Я поддерживаю следующее, И я не могу использовать что-то больше 10 для минуты:

minSdkVersion 10
targetSdkVersion 19

в моих стилях у меня есть следующее:

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

и в моем манифесте у меня есть это для деятельности:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

создание диалогового окна, как это было то, что я прыгала, как я уже закончил макет.

может кто-нибудь сказать мне, как я могу обойти эту проблему?

30 ответов


причина этой проблемы заключается в том, что действие, к которому вы пытаетесь применить тему диалога, расширяется ActionBarActivity что требует AppCompat тема для применения.

обновление расширение AppCompatActivity также будет иметь эту проблему

в этом случае измените наследование Java из ActionBarActivity до Activity и оставьте тему диалога в манифесте как есть, не Theme.AppCompat стоимостью


общее правило что если вы хотите, чтобы ваш код для поддержки старых версий Android, он должен иметь AppCompat тема и код java должны расширяться AppCompatActivity. Если у вас есть *действие, которое не нуждается в этой поддержке, например, вы заботитесь только о последних версиях и функциях Android, вы можете применить к нему любую тему, но код java должен расширить простой старый Activity.


Примечание: при изменении от AppCompatActivity (или подкласс, ActionBarActivity), to Activity необходимо также изменить различные звонки с "поддержка" соответствующему вызову без "поддержка". Итак, вместо getSupportFragmentManager, называют getFragmentManager.


все, что вам нужно сделать, это добавить android:theme="@style/Theme.AppCompat.Light" к тегу вашего приложения в .


копирование ответа из @MarkKeen в комментариях выше, поскольку у меня была та же проблема.

у меня была ошибка, указанная в верхней части сообщения, и произошло после того, как я добавил диалоговое окно предупреждения. У меня есть вся соответствующая информация о стиле в манифесте. Моя проблема была решена путем изменения контекстной ссылки в построителе предупреждений - я изменил:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

в:

new android.support.v7.app.AlertDialog.Builder(this)

и больше никаких проблем.


минимальный sdk 10. ActionBar доступно с уровня api 11. Таким образом, для 10 вы будете использовать AppCompat из библиотеки поддержки, для которой вам нужно использовать Theme.AppCompat или потомок того же самого.

использовать

android:theme="@style/Theme.AppCompat" >

или если вы не хотите панель действий в верхней части

android:theme="@style/Theme.AppCompat.NoActionBar">

Подробнее @

http://developer.android.com/guide/topics/ui/actionbar.html

Edit:

возможно, я неправильно понял op должность.

кажется, op хочет диалог с темой активности. Так как уже предложено Bobbake4 extend Activity вместо ActionBarActivity.

Также посмотрите атрибуты @ Dialog в ссылке ниже

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


это сработало для меня, я просто изменил:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

для этого:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

я испытывал эту проблему, хотя моя тема была AppCompat тема и моя деятельность была AppCompatActivity (или Activity, как предложено в ответах других). Поэтому я очистил, перестроил и перезапустил проект.

( Build - > Чистый Проект; Build - > Перестроить Проект; Run - > Run)

это может показаться глупым, но теперь это работает!

просто надеюсь, что это помогает!


это то, что исправило это для меня: вместо указания темы в манифесте я определил ее в onCreate для каждого действия, которое расширяет ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

здесь MyAppTheme является потомком элемента Theme.AppCompat, и определяется в xml. Обратите внимание, что тема должна быть установлена до super.onCreate и setContentView.


перейдите к своим стилям и поместите Родительский

parent="Theme.AppCompat"

вместо

parent="@android:style/Theme.Holo.Light"

в моем случае у меня нет файла values-v21 в моем каталоге res. Затем я создал его и добавил в него следующий код:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Если вам нужно расширить ActionBarActivity вам нужно на вашем стиле.XML-код:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

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

Если вы установите в качестве основной темы вашего приложения как android: Theme.Материал.Свет вместо AppTheme.База затем вы получите " IllegalStateException: вам нужно использовать тему.Тема AppCompat (или потомок) с этим действием " ошибка.


изменить тему желаемого действия. Это работает для меня:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

У меня была та же проблема, но она была решена, когда я поместил это в manifest: android:theme="@style/Theme.Совместимости приложений.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>

у меня была такая авария на Samsung устройства, даже если активность использовала тема.Совместимости приложений. Основная причина была связана со странными оптимизациями на стороне Samsung:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

мое решение было просто удалить android:launchMode="singleTask"


для меня было решение использовать ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

С Android-Как создать FAB программно?


Просто Делать

new AlertDialog.Builder(this)

вместо

new AlertDialog.Builder(getApplicationContext())

У вас есть много решений этой ошибки.

  1. вы должны использовать активность или FragmentActivity вместо ActionbarActivity или AppCompatActivity

  2. Если вы хотите использовать ActionbarActivity или AppCompatActivity, вы должны изменить в стили.в XML тема.Голографический.xxxx to тема.Совместимости приложений.Свет!--6--> (при необходимости добавить в DarkActionbar)

Если вам не нужны дополнительные атрибуты о панели действий или совместимости приложений вам не нужно использовать Actionbar или совместимости приложений.


в манифесте Android просто измените тему активности на AppTheme, как следовать фрагменту кода

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>

Это когда вы хотите AlertDialog во фрагменте

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();

у меня была эта проблема, а также то, что я сделал, чтобы исправить это, и по-прежнему использовать тему Holo было сделать следующие шаги:

сначала Я заменил этот импорт:

import android.support.v7.app.AppCompatActivity;

С этим:

import android.app.Activity;

затем изменил мое расширение с:

public class MyClass extends AppCompatActivity {//...

для этого:

public class MyClass extends Activity {//...

а также пришлось изменить этот импорт:

import android.support.v7.app.AlertDialog;

этого импорт:

import android.app.AlertDialog;

и затем вы можете использовать свой тег темы в манифесте на уровень активности:

android:theme="@android:style/Theme.Holo.Dialog" />

и, наконец, (если у вас нет других классов в вашем проекте, который должен использовать V7 appCompat), вы можете очистить и перестроить свой проект или удалить эту запись в файле сборки gradle на уровне приложения:

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

если в вашем проекте есть другие классы, которые должны использовать V7 appCompat, просто очистите и перестройте проект.


Вы пришли к этому, потому что вы хотите применить Material Design в своем стиле темы в предыдущих версиях sdk до 21. ActionBarActivity требует AppThemeТак что если вы также хотите, чтобы предотвратить вашу собственную настройку о вашем AppTheme, только вы должны изменить свои стили.xml (предшествующий sdk 21) таким образом, может наследовать для темы App Compat.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

для этого:

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

измените родительский стиль темы на

 parent="Theme.AppCompat"

это сработало для меня ...


это сработало для меня:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>

ваша активность расширяется ActionBarActivity что требует совместимости приложений.тема для применения. Изменение от ActionBarActivity to активность или FragmentActivity, это решит проблему.

Если вы не используете панель действий тут :

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 

быстрое решение.

измените базовый родитель темы в стилях.в XML

заменить на

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

to

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

в моем опыте проблема заключалась в контексте, в котором я показал свой диалог. Внутри нажатия кнопки я создаю экземпляр AlertDialog следующим образом:

builder = new AlertDialog.Builder(getApplicationContext());

но контекст был неправильным и вызвал ошибку. Я изменил его, используя контекст приложения таким образом:

в разделе Объявления:

Context mContext;

в методе onCreate

mContext = this;

и, наконец, в коде, где мне нужен AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

это решение для меня.


это решение работает для меня.

библиотека дизайна зависит от библиотек поддержки v4 и AppCompat, поэтому не используйте другую версию для библиотеки appcompat и design в gradle.

использовать

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

вместо

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'

У меня была такая же проблема. Потому что я создавал пользовательский навигационный ящик. Но я забыл упомянуть тему в моем манифесте, как это

android: theme= " @стиль / тема.Совместимости приложений.NoActionBar"

Как только я добавил выше в теме мой манифест это решило проблему.


для меня ни один из вышеперечисленных ответов работал даже после того, как я Theme.AppCompat как моя базовая тема для приложения. Я использовал com.android.support:design:24.1.0 поэтому я просто изменил версию на 24.1.1. После синхронизации gradle он снова работает, и исключение исчезло. Мне кажется, проблема была с некоторыми более старыми версиями библиотек поддержки дизайна.

просто поместите это здесь, если другие ответы не работают для некоторых людей.


в моем случае я раздувал представление с помощью ApplicationContext. Когда вы используете ApplicationContext, тема / стиль не применяется, поэтому, хотя была тема.Appcompat в моем стиле, он не был применен и вызвал это исключение. Более детально: тема / стиль не применяется, когда inflater используется с ApplicationContext


моя деятельность с SectionsPagerAdapter и ViewPager & Fragment

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }