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, ActionBarActivity
uitbreidt, waarvoor het AppCompat
-thema moet worden toegepast.
Update: het uitbreiden van AppCompatActivity
zou ook dit probleem hebben
In dit geval wijzigt u de Java-overerving van ActionBarActivity
in Activity
en laat u het dialoogthema in het manifest zoals het is, een niet Theme.AppCompat
waarde
De algemene regel is dat als u wilt dat uw code oudere versies van Android ondersteunt, deze het thema AppCompat
moet hebben en dat de Java-code AppCompatActivity
moet 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. ActionBar
is beschikbaar vanaf api-niveau 11. Dus voor 10 gebruik je AppCompat
uit de ondersteuningsbibliotheek waarvoor je Theme.AppCompat
of 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 Activity
uit in plaats van ActionBarActivity
.
Kijk ook eens naar @ Dialog Attributes in de onderstaande link
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 onCreate
voor elke activiteit die ActionBarActivity
uitbreidt:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MyAppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
...
}
Hier is MyAppTheme
een afstammeling van Theme.AppCompat
, en is gedefinieerd in xml. Merk op dat het thema moet worden ingesteld vóór super.onCreate
en 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. ActionBarActivity
vereist AppTheme
dus 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.
-
U moet ACTIVITEIT of FragmentActivity gebruiken in plaats van ActionBarActivity of AppCompatActivity
-
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">