Android Studio 0.4.5
Документация Android для создания пользовательских диалоговых окон: http://developer.android.com/guide/topics/ui/dialogs.html
Если вам нужен пользовательский диалог, вы можете вместо этого отображать Activity в качестве диалога вместо использования Dialog API. Просто создайте действие и установите его тему на Theme.Holo.Dialog в <activity>
элементе manifest:
<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>
Создание такого диалогового окна было чем-то, что я прыгал, поскольку я уже закончил макет.
Может кто-нибудь сказать мне, как я могу обойти эту проблему?
источник
AppCompat
форму поддержки библиотеки для поддержки панелей действий ниже уровня API. Просто используйтеandroid:theme="@style/AppTheme" >
для действия в манифестеAndroidManifest.xml
тема, которую вы указываете для своей деятельности, имеет приоритет над темой, которую вы указываете для своего приложения. Удалитьandroid:theme
строку из<activity>
тега.Ответы:
Причина, по которой у вас возникла эта проблема, заключается в том, что действие, к
ActionBarActivity
которому вы пытаетесь применить тему диалога, расширяется, что требует примененияAppCompat
темы.Обновление : расширение
AppCompatActivity
также будет иметь эту проблемуВ этом случае измените наследование Java от
ActionBarActivity
доActivity
и оставить диалог тему в манифесте , как это, неофициальноеTheme.AppCompat
значениеОбщее правило заключается в том, что если вы хотите, чтобы ваш код поддерживал более старые версии Android, он должен иметь
AppCompat
тему, а код Java должен расширятьсяAppCompatActivity
. Если у вас есть * действие, которое не нуждается в этой поддержке, например, если вы заботитесь только о последних версиях и функциях Android, вы можете применить к нему любую тему, но код java должен расширять старыйActivity
.ПРИМЕЧАНИЕ. При переходе с
AppCompatActivity
(или подклассаActionBarActivity
) наActivity
, также необходимо изменить различные вызовы с «поддержкой» на соответствующий вызов без «поддержки». Так что вместоgetSupportFragmentManager
звонитеgetFragmentManager
.источник
ActionBarActivity
что показано в его утверждениях import из комментария под вопросом.Все, что вам нужно сделать, это добавить
android:theme="@style/Theme.AppCompat.Light"
тег вашего приложения вAndroidManifest.xml
файл.источник
Копирование ответа от @MarkKeen в комментариях выше, так как у меня была та же проблема.
У меня была ошибка, указанная в верхней части сообщения, и произошла после того, как я добавил диалоговое окно с предупреждением. У меня есть вся соответствующая информация о стиле в манифесте. Моя проблема была исправлена путем изменения ссылки на контекст в конструкторе оповещений - я изменил:
чтобы:
И проблем больше нет.
источник
getActivity()
а неthis
как предложено выше, и проблема устранена. Что касается того, почему, я могу только предположить, что более старый код AlertDialog.Builder (xxx) либо хотел передать другой тип, либо просто менее требователен к тому, что было передано, в то время как текущий Builder () действительно действительно хочет Activity. Так как Google решил скрыть (удалить?) Документацию для старого кода, предположительно, в попытке поощрить использование версии v7.app, я не знаю, как точно сказать.getContext()
вместо,this
если вы находитесь внутри ArrayAdapter или аналогичного класса адаптера.min sdk равно 10.
ActionBar
доступно на уровне API 11. Таким образом, для 10 вы будете использоватьAppCompat
из библиотеки поддержки, для которой вы должны использоватьTheme.AppCompat
или потомок того же.использование
Или, если вы не хотите панель действий наверху
Больше информации @
http://developer.android.com/guide/topics/ui/actionbar.html
Редактировать:
Я мог неправильно прочитать сообщение.
Кажется, что ОП хочет диалог с темой деятельности. Таким образом, как уже предложено 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/
источник
Если вы используете контекст приложения, вот так:
измените его на контекст деятельности, как это:
источник
Я столкнулся с этой проблемой, хотя моя Тема была
AppCompat
Темой, а моя Активность -AppCompatActivity
(илиActivity
, как подсказывалось в ответах других). Поэтому я почистил, перестроил и снова запустил проект.( Построить -> Очистить проект; Построить -> Перестроить проект; Выполнить -> Выполнить )
Это может показаться глупым, но теперь это прекрасно работает !
Надеюсь, это поможет!
источник
Это то, что исправило это для меня: вместо того, чтобы указывать тему в манифесте, я определил ее
onCreate
для каждого расширяемого действияActionBarActivity
:Вот
MyAppTheme
потомокTheme.AppCompat
, и определяется в XML. Обратите внимание, что тема должна быть установлена доsuper.onCreate
иsetContentView
.источник
перейти к своим стилям и поставить родителя
вместо
источник
Измените тему желаемого занятия. Это работает для меня:
источник
В моем случае у меня нет файла values-v21 в моей директории res. Затем я создал его и добавил следующие коды:
источник
У меня был такой сбой на устройствах Samsung, хотя активность использовала Theme.AppCompat . Основная причина была связана со странными оптимизациями на стороне Samsung:
Мое решение просто удаляло
android:launchMode="singleTask"
источник
Если вам нужно расширить ActionBarActivity, вам нужно в вашем style.xml:
Если вы установите в качестве основной темы вашего приложения андроид: Theme.Material.Light вместо AppTheme.Base, вы получите сообщение об ошибке «IllegalStateException: вам нужно использовать тему Theme.AppCompat (или потомок) с этим действием».
источник
Просто делать
Вместо
источник
this
должен быть.У меня была та же проблема, но она была решена, когда я поместил это в манифест: android: theme = "@ style / Theme.AppCompat.
источник
В моем случае такая проблема возникла, когда я пытался показать диалог. Проблема была в контексте, я использую getBaseContext (), который теоретически должен возвращать контекст Activity, но, по-видимому, его нет, или он возвращает контекст до применения любой темы.
Поэтому я просто заменил getBaseContexts () на « this », и теперь он работает как положено.
источник
У меня была активность с темой,
<android:theme="@android:style/Theme.Dialog">
используемой для отображения диалога в моем appWidget и у меня была та же проблемаЯ решил эту ошибку, изменив код активности, как показано ниже:
источник
для меня было решением использовать ContextThemeWrapper:
с Android - Как создать FAB программно?
источник
Убедитесь, что вы используете контекст активности при создании нового диалогового окна оповещения, а не приложение или базовый контекст.
источник
У меня была и эта проблема, и что я сделал, чтобы ее исправить, И все еще использовал тему Holo, чтобы предпринять следующие шаги:
Сначала я заменил этот импорт:
с этим:
затем изменил мое расширение с:
к этому:
А также пришлось изменить этот импорт:
к этому импорту:
и затем вы можете использовать свой тег темы в манифесте на уровне активности:
и, наконец, (если в вашем проекте нет других классов, которые должны использовать v7 appCompat), вы можете либо очистить и перестроить свой проект, либо удалить эту запись в файле сборки gradle на уровне приложения:
если у вас есть другие классы в вашем проекте, которые должны использовать v7 appCompat, просто очистите и пересоберите проект.
источник
Вы пришли к этому, потому что хотите применить Material Design в своем стиле темы в предыдущих версиях SDK до 21.
ActionBarActivity
Требуется,AppTheme
поэтому, если вы также хотите запретить собственную настройку для вашей AppTheme, вам нужно только изменить в вашем styles.xml (предыдущий в SDK 21), таким образом, можно наследовать для темы App Compat.за это:
источник
Измените свой родительский стиль темы на
Это сработало для меня ...
источник
У вас есть много решений этой ошибки.
Вы должны использовать Activity или FragmentActivity вместо ActionbarActivity или AppCompatActivity
Если вы хотите использовать ActionbarActivity или AppCompatActivity , вам нужно изменить в styles.xml Theme.Holo.xxxx на Theme.AppCompat.Light (при необходимости добавить в DarkActionbar )
Если вам не нужны расширенные атрибуты о панели действий или AppCompat, вам не нужно использовать Actionbar или AppCompat .
источник
В манифесте Android просто измените тему действия на AppTheme, как показано ниже.
источник
Это когда вы хотите AlertDialog во фрагменте
источник
В моем опыте проблема заключалась в том, что я показывал свой диалог. Внутри нажатия кнопки я создаю экземпляр AlertDialog следующим образом:
Но контекст был неверным и вызвал ошибку. Я изменил его, используя контекст приложения следующим образом:
В разделе объявления:
в методе onCreate
И, наконец, в коде, где мне нужен AlertDialog:
Это решение для меня.
источник
Этот работал для меня:
источник
Ваша активность расширяет ActionBarActivity, которая требует применения AppCompat.theme . Меняться от ActionBarActivity на Activity или FragmentActivity , это решит проблему.
источник
У меня была такая же проблема. Потому что я создавал пользовательский навигационный ящик. Но я забыл упомянуть тему в моем манифесте, как это
Как только я добавил вышеупомянутую тему в мой манифест, это решило проблему.
источник
Быстрое решение.
Измените родительский элемент вашей базовой темы в styles.xml
Заменить от
в
источник
Это решение сработало для меня.
Библиотека дизайна зависит от Support v4 и библиотек поддержки AppCompat, поэтому не используйте другую версию для appcompat и библиотеки дизайна в gradle.
использование
вместо
источник