Je moet een Theme.AppCompat-thema (of afstammeling) gebruiken bij deze activiteit

Android Studio 0.4.5

Android-documentatie voor het maken van aangepaste dialoogvensters: http://developer.android. com/guide/topics/ui/dialogs.html

Als u een aangepast dialoogvenster wilt, kunt u in plaats daarvan een Activiteit als een dialoogvenster weergeven in plaats van de Dialog API’s te gebruiken. Maak eenvoudig een activiteit en stel het thema in op Theme.Holo.Dialog in
het <activity>manifest element:

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

Toen ik dit echter probeerde, kreeg ik de volgende uitzondering:

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

Ik steun het volgende, en ik kan niet iets groter dan 10 gebruiken voor de min:

minSdkVersion 10
targetSdkVersion 19

In mijn stijlen heb ik het volgende:

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

En in mijn manifest heb ik dit voor de activiteit:

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

Het maken van het dialoogvenster op deze manier was iets wat ik hoopte te doen, aangezien ik de lay-out al heb voltooid.

Kan iemand me vertellen hoe ik dit probleem kan omzeilen?


Antwoord 1, autoriteit 100%

De reden dat u dit probleem ondervindt, is omdat de activiteit waarop u het dialoogthema probeert toe te passen, ActionBarActivityuitbreidt, waarvoor het AppCompat-thema moet worden toegepast.

Update: het uitbreiden van AppCompatActivityzou ook dit probleem hebben

In dit geval wijzigt u de Java-overerving van ActionBarActivityin Activityen laat u het dialoogthema in het manifest zoals het is, een niet Theme.AppCompatwaarde


De algemene regel is dat als u wilt dat uw code oudere versies van Android ondersteunt, deze het thema AppCompatmoet hebben en dat de Java-code AppCompatActivitymoet uitbreiden. Als u *een activiteit heeft waarvoor deze ondersteuning niet nodig is, bijvoorbeeld als u alleen geïnteresseerd bent in de nieuwste versies en functies van Android, kunt u er elk thema op toepassen, maar de Java-code moet de gewone oude Activity.


OPMERKING: bij het wijzigen van AppCompatActivity(of een subklasse, ActionBarActivity), naar Activity, moeten ook de verschillende oproepen worden gewijzigd met “support ” naar de corresponderende oproep zonder“ondersteuning”. Dus, in plaats van getSupportFragmentManager, bel getFragmentManager.


Antwoord 2, autoriteit 50%

Het enige wat u hoeft te doen is android:theme="@style/Theme.AppCompat.Light"toe te voegen aan uw applicatie-tag in het bestand AndroidManifest.xml.


Antwoord 3, autoriteit 25%

Ik kopieer het antwoord van @MarkKeen in de opmerkingen hierboven omdat ik hetzelfde probleem had.

De fout stond bovenaan het bericht en gebeurde nadat ik een waarschuwingsvenster had toegevoegd. Ik heb alle relevante stijlinformatie in het manifest. Mijn probleem is verholpen door een contextverwijzing in de waarschuwingsbuilder te wijzigen – ik heb het volgende gewijzigd:

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

naar:

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

En geen problemen meer.


Antwoord 4, autoriteit 11%

Als u de toepassingscontext gebruikt, gaat u als volgt te werk:

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

wijzig het in een activiteitscontext zoals deze:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

Antwoord 5, autoriteit 10%

min sdk is 10. ActionBaris beschikbaar vanaf api-niveau 11. Dus voor 10 gebruik je AppCompatuit de ondersteuningsbibliotheek waarvoor je Theme.AppCompatof afstammeling daarvan.

Gebruik

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

Of als u geen actiebalk bovenaan wilt

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

Meer info @

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

Bewerken:

Misschien heb ik de post verkeerd gelezen.

Het lijkt erop dat ik een dialoog wil met een activiteitenthema. Dus zoals al gesuggereerd door Bobbake4, breid Activityuit in plaats van ActionBarActivity.

Kijk ook eens naar @ Dialog Attributes in de onderstaande link

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


Antwoord 6, autoriteit 4%

Ik ondervond dit probleem, hoewel mijn thema een AppCompat-thema was en mijn activiteit een AppCompatActivity(of Activity, zoals voorgesteld op andermans antwoorden). Dus ik heb het project schoongemaakt, opnieuw opgebouwd en opnieuw uitgevoerd.

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

Het lijkt misschien stom, maar nu werkt het geweldig!

Hopelijk helpt het!


Antwoord 7, autoriteit 2%

Dit is wat het voor mij heeft opgelost: in plaats van het thema in manifest te specificeren, definieerde ik het in onCreatevoor elke activiteit die ActionBarActivityuitbreidt:

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

Hier is MyAppThemeeen afstammeling van Theme.AppCompat, en is gedefinieerd in xml. Merk op dat het thema moet worden ingesteld vóór super.onCreateen setContentView.


Antwoord 8, autoriteit 2%

ga naar je stijlen en plaats de bovenliggende

parent="Theme.AppCompat"

in plaats van

parent="@android:style/Theme.Holo.Light"

Antwoord 9

Wijzig het thema van de gewenste activiteit. Dit werkt voor mij:

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

Antwoord 10

In mijn geval heb ik geen bestand met waarden-v21 in mijn res-map. Toen heb ik het gemaakt en de volgende codes erin toegevoegd:

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

Antwoord 11

Ik had zo’n crash op Samsung-apparaten, ook al gebruikte de activiteit Theme.AppCompat.
De hoofdoorzaak had te maken met rare optimalisaties aan de kant van 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

Mijn oplossing was gewoon het verwijderen van android:launchMode="singleTask"


Antwoord 12

Gewoon doen

new AlertDialog.Builder(this)

In plaats van

new AlertDialog.Builder(getApplicationContext())

Antwoord 13

Als je ActionBarActivity wilt uitbreiden, heb je nodig op je style.xml:

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

Als je als hoofdthema van je applicatie android:Theme.Material.Light instelt in plaats van AppTheme.Base, dan krijg je een “IllegalStateException: je moet een Theme.AppCompat-thema gebruiken (of afstammeling) met deze activiteit” fout.


Antwoord 14

Ik had hetzelfde probleem, maar het loste op toen ik dit op manifest: android:theme=”@style/Theme.AppCompat.

zette.

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

Antwoord 15

In mijn geval deed zich een dergelijk probleem voor toen ik Dialog probeerde weer te geven.
Het probleem was in context, ik gebruik getbasecontext () die theoretisch een activiteitscontext zou moeten retourneren, maar lijkt het niet, of het retourregistratie van de context voordat een thema wordt toegepast.

Dus ik heb net getbasecontexts () vervangen () met “dit “, en nu werkt het zoals verwacht.

       Dialog.showAlert(this, title, message,....);

Antwoord 16

Ik had een activiteit met thema <android:theme="@android:style/Theme.Dialog">Gebruikt voor het weergeven van dialoogvenster in mijn appwidget en ik had hetzelfde probleem

Ik heb deze fout opgelost door activiteitscode zoals hieronder te wijzigen:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}

Antwoord 17

Voor mij een oplossing, na het uitproberen van alle oplossingen vanaf hier , moest veranderen

   <activity
        android:name="com.github.cythara.MainActivity"
        android:label="Main">
    </activity>

Om een ​​thema op te nemen:

   <activity
        android:name="com.github.cythara.MainActivity"
        android:theme="@style/Theme.AppCompat.NoActionBar"
        android:label="Main">
    </activity>

Antwoord 18

U bent hiertoe gekomen omdat u Material Design in uw themastijl in eerdere sdk-versies naar 21 wilt toepassen. ActionBarActivityvereist AppThemedus als u ook wilt voorkomen dat uw eigen aanpassing over uw AppTheme, alleen hoeft u uw styles.xml (vóór sdk 21) te wijzigen, zodat u het op deze manier kunt erven voor een App Compat-thema.

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

hiervoor:

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

Antwoord 19

voor mij was de oplossing om ContextThemeWrapper te gebruiken:

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

van Android – Hoe FAB programmatisch te maken?


Antwoord 20

Ik had dit probleem ook en wat ik deed om het op te lossen, EN nog steeds het Holo-thema gebruikte, was om deze stappen te nemen:

eerst heb ik deze import vervangen:

import android.support.v7.app.AppCompatActivity;

met deze:

import android.app.Activity;

veranderde vervolgens mijn extensie van:

public class MyClass extends AppCompatActivity {//...

naar dit:

public class MyClass extends Activity {//...

en moest ook deze import wijzigen:

import android.support.v7.app.AlertDialog;

Aan deze import:

import android.app.AlertDialog;

En dan kunt u uw thema-tag gebruiken in het manifest op het activiteitsniveau:

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

En tenslotte, (tenzij u andere klassen in uw project hebt, moet u V7-appcompat gebruiken), kunt u uw project schoonmaken en opnieuw opbouwen of deze vermelding verwijderen in het Gradle Build-bestand op het app-niveau:

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

Als u andere klassen in uw project hebt die V7-appcompat moet gebruiken, reinigt u het project gewoon en opnieuw op.


Antwoord 21

Zorg ervoor dat u een activiteitscontext gebruikt tijdens het maken van een nieuw waarschuwingsdialoogvenster en geen toepassing of basiscontext.


Antwoord 22

U hebt vele oplossingen voor die fout.

  1. U moet ACTIVITEIT of FragmentActivity gebruiken in plaats van ActionBarActivity of AppCompatActivity

  2. Als u ActionBarActivity of AppCompatActivity wilt gebruiken, moet u in Styles.xml Theme.holo.xxxx wijzigen naar theme.appcompat.light (indien nodig toevoegen aan DarkactionBar )

Als u geen geavanceerde attributen nodig hebt over de actiebalk of AppCompat hoef u ActionBar of AppCompat niet te gebruiken.


Antwoord 23

Verander in het Android-manifest het thema van de activiteit in AppTheme als volgt codefragment

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

Antwoord 24

Ik kreeg hetzelfde probleem. Omdat ik een aangepaste navigatielade aan het maken was. Maar ik vergeet het thema zo in mijn manifest te vermelden

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

Zodra ik het bovenstaande thema aan mijn manifest had toegevoegd, was het probleem opgelost.


Antwoord 25

Wijzig de bovenliggende themastijl in

parent="Theme.AppCompat"

Dit werkte voor mij …


Antwoord 26

Deze werkte voor mij:

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

Antwoord 27

Uw activiteit breidt ActionBarActivityuit, waarvoor AppCompat.thememoet worden toegepast.
Verander van ActionBarActivityin Activityof FragmentActivity, het zal het probleem oplossen.

Als u geen actiebalk gebruikt, dan :

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

Antwoord 28

Dit is wanneer u een AlertDialog in een fragment wilt

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

Antwoord 29

In mijn ervaringen was het probleem de context waarin ik mijn dialoog liet zien.
Met een klik op de knop maak ik op deze manier een AlertDialog aan:

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

Maar de context was niet correct en veroorzaakte de fout. Ik heb het op deze manier gewijzigd met behulp van de toepassingscontext:

In sectie declareren:

Context mContext;

in de onCreate-methode

mContext = this;

En tot slot in de code waar ik de AlertDialog nodig heb:

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

Dit is de oplossing voor mij.


Antwoord 30

Snelle oplossing.

Wijzig de ouder van uw basisthema in styles.xml

Vervangen van

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

naar

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

Other episodes