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

Android Studio 0.4.5

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

Если вам нужен пользовательский диалог, вы можете вместо использования API 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 для min:

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>

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

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

Комментарии к вопросу (8)
Решение

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

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

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


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


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

Комментарии (25)

Все, что вам нужно сделать, это добавить Android:тема=то"@стиль/тема.Совместимости приложений.Световой" в вашем теге приложения в файл AndroidManifest.xml.

Комментарии (8)

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

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

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

к:

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

И нет больше проблем.

Комментарии (11)

min 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

Редактировать:

Возможно, я неправильно понял сообщение 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/

Комментарии (8)

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

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

к этому:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Комментарии (5)

Я столкнулись с этой проблемой, хотя моя тема была тема и совместимости приложений и моей деятельности был AppCompatActivity (или "деятельность", как полагают на других'с вариантами ответов). Так я убрал, восстановить и перезапустить проект.

(Строить -> чистый проект ; строить> проект реконструкции ; выполнить -> запустите)

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

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

Комментарии (2)

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

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

Здесь MyAppThemeпотомоктема.Совместимости приложений, и определяется в XML. Обратите внимание, что тема должна быть установлена до супер.метод onCreate " и " setContentView`.

Комментарии (2)

зайдите в свой стили и поставить родителя

parent="Theme.AppCompat"

вместо

parent="@android:style/Theme.Holo.Light"
Комментарии (2)

В моем случае у меня нет значения-в21 файл в мой каталог Res. Затем я создал его и добавил в нее следующие коды:



    @color/colorPrimary
    @color/colorPrimaryDark
    @color/colorAccent
Комментарии (1)

Если вам нужно продлить ActionBarActivity вам нужно на style.xml:





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

Комментарии (0)

Вобще

new AlertDialog.Builder(this)

Вместо

new AlertDialog.Builder(getApplicationContext())
Комментарии (2)

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

Комментарии (0)

У меня был такой сбой на 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

Мое решение было просто удалить launchMode=то&quot андроида:; singleTask"в

Комментарии (2)

У меня была такая же проблема, но она решаема, когда я положил это в манифесте: Android:тема=то"@стиль/тема.Совместимости приложений.



        ...    

Комментарии (0)

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

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

от https://stackoverflow.com/questions/34555834/android-how-to-create-fab-programmatically

Комментарии (0)

У меня активность с темой <Android:тема=то"@Андроид:стиль/тема.Диалог" и> используется для диалогового окна в моей appWidget и я была такая же проблема

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}
Комментарии (1)

В моем случае такая проблема появилась, когда я пытался показать диалог. Проблема была в контексте, Я'использовать ве getBaseContext() который теоретически должен вернуться к контексту действия, но, похоже, его нет, или он вернется контексте перед любой примененной темой.

Поэтому я просто заменил getBaseContexts() с "это", и теперь он работает, как ожидалось.

        Dialog.showAlert(this, title, message,....);
Комментарии (1)

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

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

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

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

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

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

Комментарии (0)

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

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

  2. Если вы хотите использовать ActionbarActivity или AppCompatActivity, вам необходимо изменить в styles.xml тема.Холо.ХХХХ на тему.Совместимости приложений.Света (при необходимости добавить в DarkActionbar)

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

Комментарии (0)

Вы пришли к этому, потому что вы хотите применить материал дизайн в стиле тему в предыдущих версиях SDK для 21. ActionBarActivity требует `AppTheme дальсо если вы также хотите, чтобы предотвратить ваши собственные настройки о вашем AppTheme, только вы должны изменить styles.xml (предыдущие в СДК 21) таким образом, могут наследовать на тему совместимости приложений.

для этого:

Комментарии (1)