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>
Создание диалогового окна таким образом было тем, что я надеялся сделать, поскольку я уже завершил макет.
Может ли кто-нибудь подсказать мне, как я могу обойти эту проблему?
Причина, по которой у вас возникла эта проблема, заключается в том, что активность, к которой вы пытаетесь применить тему диалога, расширяет ActionBarActivity
, которая требует применения темы AppCompat
.
Обновление: Расширение AppCompatActivity
также будет иметь эту проблему
В этом случае измените наследование Java с ActionBarActivity
на Activity
и оставьте тему диалога в манифесте как есть, без значения Theme.AppCompat
.
Общее правило таково: если вы хотите, чтобы ваш код поддерживал старые версии Android, он должен иметь тему AppCompat
, а java-код должен расширять AppCompatActivity
. Если у вас есть *активность, которой не нужна такая поддержка, например, вас интересуют только последние версии и возможности Android, вы можете применить к ней любую тему, но java-код должен расширять обычную старую Activity
.
ПРИМЕЧАНИЕ: При переходе от AppCompatActivity
(или подкласса ActionBarActivity
) к Activity
, необходимо также изменить различные вызовы с "поддержкой" на соответствующие вызовы без "поддержки". Так, вместо getSupportFragmentManager
, вызовите getFragmentManager
.
Копирование ответа от @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" >
Или если вам не нужна панель действий вверху
android:theme="@style/Theme.AppCompat.NoActionBar">
Подробнее @
http://developer.android.com/guide/topics/ui/actionbar.html
Редактировать:
Возможно, я неправильно понял сообщение op.
Похоже, он хочет диалог с темой активности. Поэтому, как уже предложил Bobbake4, расширьте Activity
вместо ActionBarActivity
.
Также посмотрите @ Атрибуты диалога в ссылке ниже
Это работало для меня, я просто изменен:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
к этому:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Я столкнулись с этой проблемой, хотя моя тема была тема и совместимости приложений и моей деятельности был AppCompatActivity
(или "деятельность", как полагают на других'с вариантами ответов). Так я убрал, восстановить и перезапустить проект.
(Строить -> чистый проект ; строить> проект реконструкции ; выполнить -> запустите)
Это может показаться глупо, но сейчас это работает отлично!
Просто надеюсь, что это помогает!
Вот что установил его для меня: вместо того, чтобы указывать темы в манифесте, я определил его в метод 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`.
зайдите в свой стили и поставить родителя
parent="Theme.AppCompat"
вместо
parent="@android:style/Theme.Holo.Light"
В моем случае у меня нет значения-в21 файл в мой каталог 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 вам нужно на 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:темы.Материал.Свет вместо AppTheme.Базы тогда ты получишь “IllegalStateException:вы должны использовать тему.Тема совместимости приложений (или потомок) с этой деятельностью” ошибка.
Изменить тему нужной вам деятельности. Это работает для меня:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
У меня был такой сбой на 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=то" андроида:; singleTask"
в
У меня была такая же проблема, но она решаема, когда я положил это в манифесте: Android:тема=то"@стиль/тема.Совместимости приложений.
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name_test"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat">
...
</application>
для меня было решение использовать 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
У меня активность с темой <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);
}
В моем случае такая проблема появилась, когда я пытался показать диалог. Проблема была в контексте, Я'использовать ве getBaseContext() который теоретически должен вернуться к контексту действия, но, похоже, его нет, или он вернется контексте перед любой примененной темой.
Поэтому я просто заменил getBaseContexts() с "это", и теперь он работает, как ожидалось.
Dialog.showAlert(this, title, message,....);
Я имел эту проблему, а также и то, что я сделал, чтобы исправить это, и до сих пор используют тему Холо был предпринять следующие действия:
сначала Я заменил этот импорт:
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 затем просто очистить и перестроить проект.
У вас есть много решений этой ошибки.
Вы должны использовать активность или FragmentActivity вместо ActionbarActivity или AppCompatActivity
Если вы хотите использовать ActionbarActivity или AppCompatActivity, вам необходимо изменить в styles.xml тема.Холо.ХХХХ на тему.Совместимости приложений.Света (при необходимости добавить в DarkActionbar)
Если вы Don'т нужны дополнительные атрибуты о панели действий или совместимости приложений вы Don'т должны использовать верхней панели или совместимости приложений.
Вы пришли к этому, потому что вы хотите применить материал дизайн в стиле тему в предыдущих версиях SDK для 21. ActionBarActivity
требует `AppTheme дальсо если вы также хотите, чтобы предотвратить ваши собственные настройки о вашем AppTheme, только вы должны изменить styles.xml (предыдущие в СДК 21) таким образом, могут наследовать на тему совместимости приложений.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
для этого:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">