Musisz użyć motywu.Motyw AppCompat (lub potomek) z tą aktywnością

Android Studio 0.4.5

Dokumentacja Androida do tworzenia niestandardowych okien dialogowych: http://developer.android.com/guide/topics/ui/dialogs.html

Jeśli chcesz mieć własne okno dialogowe, możesz zamiast tego wyświetlić aktywność jako okno dialogowe, zamiast używać interfejsów API okna dialogowego. Po prostu utwórz aktywność i ustaw jej temat na temat.Holo.Dialog w <activity> element manifestu:

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

Jednak, kiedy próbowałem tego dostaję następujący wyjątek:

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

Popieram po, a nie mogę użyć czegoś większego niż 10 przez min:

minSdkVersion 10
targetSdkVersion 19

W moich stylach mam następujące:

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

I w moim manifeście mam to do działania:

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

Tworzenie okna dialogowego w ten sposób było czymś, co przeskakiwałem, ponieważ już ukończyłem układ.

Czy ktoś może mi powiedzieć, jak mogę obejść ten problem?
Author: Kara, 2014-02-16

30 answers

Powodem, dla którego masz ten problem, jest to, że działanie, do którego próbujesz zastosować motyw okna dialogowego, rozszerza ActionBarActivity, co wymaga zastosowania motywu AppCompat.

Update : rozszerzenie AppCompatActivity również miałoby ten problem

W tym przypadku zmień dziedziczenie Javy z ActionBarActivity Na Activity i pozostaw motyw okna dialogowego w manifeście w takim stanie, jakim jest, nie Theme.AppCompat wartość


Ogólna zasada jest taka, że jeśli chcesz, aby Twój kod obsługiwał starsze wersje Androida powinny mieć motyw AppCompat, A kod Javy powinien rozszerzać AppCompatActivity. Jeśli masz * działanie, które nie wymaga tego wsparcia, na przykład dbasz tylko o najnowsze wersje i funkcje Androida, możesz zastosować do niego dowolny motyw, ale kod java musi rozszerzyć zwykły stary Activity.


Uwaga: przy zmianie z AppCompatActivity (lub podklasy, ActionBarActivity) Na Activity, Należy również zmienić różne wywołania z "wsparciem" na odpowiednie wywołanie BEZ "wsparciem". Więc, zamiast getSupportFragmentManager, wywołaj getFragmentManager.

 989
Author: Bobbake4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 13:39:41

Wystarczy dodać android:theme="@style/Theme.AppCompat.Light" do znacznika aplikacji w pliku AndroidManifest.xml.

 476
Author: iusting,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 11:33:33

Kopiowanie odpowiedzi z @MarkKeen w komentarzach powyżej, ponieważ miałem ten sam problem.

Miałem błąd podany na górze posta i stało się po dodaniu okna dialogowego alertu. Mam wszystkie istotne informacje o stylu w manifeście. Mój problem został wyleczony przez zmianę odniesienia kontekstowego w kreatorze alertów-zmieniłem:

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

Do:

new android.support.v7.app.AlertDialog.Builder(this)
I żadnych więcej problemów.
 179
Author: A.K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-27 00:59:26

Min sdk wynosi 10. ActionBar jest dostępny z poziomu api 11. Więc dla 10 będziesz używać AppCompat z biblioteki wsparcia, dla której musisz użyć Theme.AppCompat lub potomka tego samego.

Użyj

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

Lub jeśli nie chcesz paska akcji na górze

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

Więcej informacji @

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

Edit:

Mogłem źle odczytać post op.

Wygląda na to, że op chce mieć okno dialogowe z motywem aktywności. Tak jak już sugerowane przez Bobbake4 extend Activity zamiast ActionBarActivity.

Zobacz też atrybuty look @ Dialog w linku poniżej

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

 85
Author: Raghunandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-15 09:27:49

U mnie to zadziałało, po prostu się zmieniłem:

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

Do tego:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 63
Author: Darush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 20:27:18

Doświadczałem tego problemu, mimo że mój temat był tematem AppCompat, a Moja aktywność była AppCompatActivity (lub Activity, jak sugerowano w odpowiedziach innych). Więc posprzątałem, przebudowałem i odtworzyłem projekt.

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

to może wydawać się głupie, ale teraz działa świetnie !

mam nadzieję, że to pomoże!

 31
Author: Geraldo Neto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-19 21:48:53

Oto, co mi to naprawiło: zamiast określać motyw w manifeście, zdefiniowałem go w onCreate dla każdego działania, które rozszerza ActionBarActivity:

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

Tutaj MyAppTheme jest potomkiem Theme.AppCompat i jest zdefiniowany w xml. Zwróć uwagę, że motyw musi być ustawiony przed super.onCreate i setContentView.

 24
Author: k29,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-14 21:37:26

Przejdź do swojego stylu i umieść rodzica

parent="Theme.AppCompat"

Zamiast

parent="@android:style/Theme.Holo.Light"
 17
Author: Yamen Nassif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-03 10:45:13

W moim przypadku nie mam pliku values-v21 w katalogu res. Następnie utworzyłem go i dodałem do niego następujące Kody:

  <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>
 16
Author: Ali Gürelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 09:04:40

Jeśli chcesz rozszerzyć ActionBarActivity, musisz użyć swojego stylu.xml:

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

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

Jeśli ustawisz jako główny motyw aplikacji jako Android: Theme.Materiał.Światło zamiast AppTheme.Base wtedy otrzymasz " IllegalStateException:musisz użyć motywu.AppCompat theme (lub potomek) z tym działaniem " error.

 13
Author: JonasOliveira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-03 22:10:28

Zmień temat pożądanego działania. To mi działa:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
 13
Author: sharma_kunal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 18:36:18

Miałem ten sam problem, ale rozwiązał się, gdy umieściłem to na manifest: 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>
 12
Author: Marc Baduq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 15:30:02

Miałem taką awarię na urządzeniach Samsung , mimo że aktywność używała motywu .AppCompat . Główną przyczyną było dziwne optymalizacje po stronie Samsunga:

- 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

Moim rozwiązaniem było usunięcie android:launchMode="singleTask"

 11
Author: goRGon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-29 00:08:58

Dla mnie rozwiązaniem było użycie ContextThemeWrapper:

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

Z Android-jak programowo tworzyć FAB?

 7
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:42

Po Prostu Zrób

new AlertDialog.Builder(this)

Zamiast

new AlertDialog.Builder(getApplicationContext())
 7
Author: Ali Akram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 10:37:06

Masz wiele rozwiązań tego błędu.

  1. Należy użyć Activity lub FragmentActivity zamiast ActionbarActivity lub AppCompatActivity

  2. Jeśli chcesz użyć ActionbarActivity lub AppCompatActivity, powinieneś zmienić style .xml temat.Holo.xxxx to Theme.AppCompat.Light (w razie potrzeby dodaj do DarkActionbar)

Jeśli nie potrzebujesz Zaawansowanego atrybuty dotyczące paska akcji lub AppCompat nie musisz używać Actionbarlub AppCompat.

 6
Author: Kaloglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-22 00:06:33

W manifeście Androida po prostu Zmień motyw aktywności na AppTheme jako następujący fragment kodu

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
 6
Author: shikha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 06:28:05

To jest, gdy chcesz AlertDialog we fragmencie

            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();
 6
Author: Avinash_ks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 06:21:30

Też miałem ten problem i co zrobiłem, aby go naprawić, a nadal używam tematu Holo, to wykonać następujące kroki: {]}

Najpierw zastąpiłem ten import:

import android.support.v7.app.AppCompatActivity;

Z tym:

import android.app.Activity;

Potem zmieniłem rozszerzenie z:

public class MyClass extends AppCompatActivity {//...

Do tego:

public class MyClass extends Activity {//...

A także musiał zmienić ten import:

import android.support.v7.app.AlertDialog;

Do tego importu:

import android.app.AlertDialog;

A następnie możesz użyć tagu motywu w manifeście na poziomie aktywności:

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

I na koniec (chyba że masz inne klasy w Twoim projekcie, które muszą używać appCompat v7) możesz wyczyścić i przebudować swój projekt lub usunąć ten wpis w pliku gradle build na poziomie aplikacji:

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

Jeśli masz inne klasy w swoim projekcie, które muszą używać appCompat v7, po prostu wyczyść i Przebuduj projekt.

 6
Author: Wraithious,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-11 22:37:19

Doszedłeś do tego, ponieważ chcesz zastosować projekt materiału w swoim stylu motywu w poprzednich wersjach sdk do 21. ActionBarActivity wymaga AppTheme więc jeśli chcesz również zapobiec własnej personalizacji o AppTheme, tylko musisz zmienić swoje style.xml (poprzedni do sdk 21) więc w ten sposób, może dziedziczyć dla motywu Compat aplikacji.

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

Do tego:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5
Author: danigonlinea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-27 10:11:16

Zmień rodzica stylu motywu na

 parent="Theme.AppCompat"
To mi pomogło ...
 5
Author: Fazal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-09 16:50:41

Ten u mnie zadziałał:

<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>
 5
Author: user1501382,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-18 06:55:34

Twoja aktywność rozszerza ActionBarActivity , która wymaga AppCompat.temat do zastosowania. Zmień z ActionBarActivity na Activity lub FragmentActivity , to rozwiąże problem.

Jeśli używasz no Action bar then:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
 5
Author: Md Imran Choudhury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 20:03:56

Szybkie rozwiązanie.

Zmień rodzica motywu podstawowego w stylach.xml

Zastąp z

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

Do

<style name="AppTheme" parent="Theme.AppCompat">
 4
Author: Kaloglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-22 12:57:53

W moich doświadczeniach problemem był kontekst, w którym pokazywałem moje okno dialogowe. Wewnątrz przycisku KLIKNIJ I instantiate a AlertDialog w ten sposób:

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

Ale kontekst nie był poprawny i spowodował błąd. Zmieniłem go używając kontekstu aplikacji w ten sposób:

W sekcji declare:

Context mContext;

W metodzie onkologicznej

mContext = this;

I na koniec w kodzie gdzie potrzebuję 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();
                    }
            }
        }
To jest rozwiązanie dla mnie.
 4
Author: Dante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-29 12:12:31

To rozwiązanie zadziałało.

Biblioteka projektowania zależy od wsparcia bibliotek v4 i AppCompat, więc nie używaj innej wersji dla appcompat i biblioteki projektowania w gradle.

Użyj

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

Zamiast

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
 3
Author: kiran boghra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 11:58:14

Miałem ten sam problem. Bo tworzyłem własną szufladę nawigacyjną. Ale zapomniałem wspomnieć o temacie w moim manifeście jak ten

Android: theme= " @style / Theme.AppCompat.NoActionBar "

Jak tylko dodałem powyższy temat do mojego manifestu, rozwiązałem problem.

 3
Author: Azhar osws,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-18 07:34:28

Dla mnie żadna z powyższych odpowiedzi nie zadziałała nawet po tym, jak miałem Theme.AppCompat jako motyw podstawowy dla aplikacji. Używałem com.android.support:design:24.1.0, więc zmieniłem wersję na 24.1.1. Po synchronizacji gradle ponownie działa i wyjątek zniknął. Wydaje mi się, że problem dotyczył starszych wersji bibliotek wspomagających projektowanie.

Umieszczam to tutaj na wypadek, gdyby inne odpowiedzi nie zadziałały dla niektórych.
 3
Author: Sharp Edge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-24 13:26:30

W moim przypadku nadmuchiwałem widok z ApplicationContext. Gdy używasz ApplicationContext, motyw/styl nie jest stosowany, więc mimo, że był motyw.Appcompat w moim stylu, nie został zastosowany i spowodował ten wyjątek. Więcej szczegółów: Temat / styl nie jest stosowany, gdy inflater jest używany z ApplicationContext

 3
Author: Murat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-22 16:48:49

Moja aktywność z SectionsPagerAdapter i ViewPager & Fragment

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }
 2
Author: valera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 09:56:47