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

Android Studio 0.4.5

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

Если вы хотите создать настраиваемый диалог, вместо использования диалоговых окон Dialog вы можете вместо этого отображать диалоговое окно «Активность как диалог». Просто создайте действие и установите его тему в Theme.Holo.Dialog в элементе манифеста <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> 

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

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

Solutions Collecting From Web of "Вы должны использовать тему Theme.AppCompat (или потомка) с этим действием"

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

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

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


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


ПРИМЕЧАНИЕ. При изменении из AppCompatActivity (или подкласса ActionBarActivity ) на Activity также необходимо изменить различные вызовы с помощью «поддержки» на соответствующий вызов без «поддержки». Итак, вместо getSupportFragmentManager вызовите getFragmentManager .

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

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

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

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

чтобы:

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

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

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

использование

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

Больше информации @

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

Eidt:

Я мог бы неправильно прочитать пост.

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

Также посмотрите @ Диалоговые атрибуты в приведенной ниже ссылке

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); 

Это то, что исправило это для меня: вместо указания темы в манифесте я определил ее в 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" 

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

( Build -> Clean Project, Build -> Rebuild Project, Run -> Run )

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

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

Если вам нужно расширить ActionBarActivity, вам нужно на свой style.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.Material.Light вместо AppTheme.Base, тогда вы получите «IllegalStateException: вам нужно использовать тему Theme.AppCompat (или потомок) с этой ошибкой активности».

У меня была такая авария на устройствах Samsung, даже несмотря на то, что активность действительно использовала Theme.AppCompat . Основная причина была связана со странной оптимизацией со стороны 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"

В моем случае у меня нет файлов значений-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> 

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

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

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

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

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

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

для этого:

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

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

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

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

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

  2. Если вы хотите использовать ActionbarActivity или AppCompatActivity , вам следует изменить в styles.xml Theme.Holo.xxxx на Theme.AppCompat.Light (при необходимости добавить в DarkActionbar )

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

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

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

Измените родительский стиль в стиле

  parent="Theme.AppCompat" 

Это сработало для меня …

Ваша деятельность расширяет ActionBarActivity, которая требует применения AppCompat.theme . Перейдите из ActionBarActivity в Activity или FragmentActivity , он решит проблему.

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

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

Для меня было решение использовать 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?

Это когда вам нужен 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(); 

Моя активность с разделамиPagerAdapter и ViewPager & Fragment

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

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

Библиотека дизайна зависит от библиотек поддержки поддержки 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' 

ПРИМЕЧАНИЕ. Я рассматривал это как ответ, но дальнейшее тестирование показывает, что он все еще терпит неудачу при построении с использованием maven из командной строки, поэтому мне пришлось отредактировать его, чтобы быть проблемой! 🙁

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

Я был в процессе mavenizing моей сборки Android. У меня уже были зависимости от apklib и jar версий app compat, таким образом:

  <!-- See https://github.com/mosabua/maven-android-sdk-deployer --> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v7-appcompat</artifactId> <version>${compatibility.version}</version> <type>apklib</type> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v7-appcompat</artifactId> <type>jar</type> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v7</artifactId> <type>jar</type> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v4</artifactId> </dependency> 

Теперь, когда я импортирую проект maven и создаю и запускаю из IntelliJ, все в порядке.

Но когда я создаю, развертываю и запускаю из командной строки с maven, я все еще получаю это исключение.

В Android Studio: добавьте библиотеку поддержки в файл градиента и синхронизацию. Измените build.gradle (Module: app), чтобы иметь зависимости следующим образом:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' compile 'com.android.support:support-v4:23.1.1' } 

Моя версия библиотеки поддержки – 23.1.1; Используйте свою версию библиотеки поддержки, если это применимо.

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

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

Для меня проблема решена путем изменения наследования от AppCompatActivity к Activity в моем классе customDialog. В манифесте не требуется никаких изменений для Theme.Dialog.

Для меня Android SDK, похоже, не смог найти определение стилей. Все было правильно подключено, и простой проект очистил его для меня.

Просто сделайте это

GetApplicationContext (). GetTheme (). ApplyStyle (R.style.Theme_Mc, true);

И в ваших значениях / styles.xml добавьте это

  <style name="Theme.Mc" parent="Theme.AppCompat.Light.NoActionBar"> <!-- ADD Your Styles --> </style> 

Для моего проекта Xamarin Android (в MainActivity.cs) я изменил …

 public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 

в

 public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 

… и ошибка исчезла. Я понимаю, что это не решение для всех, но это может дать ключ к основной проблеме.