1129 votes

Vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité.

Android Studio 0.4.5

Documentation Android pour la création de boîtes de dialogue personnalisées : http://developer.Android.com/guide/topics/ui/dialogs.html

Si vous souhaitez une boîte de dialogue personnalisée, vous pouvez afficher une activité sous forme de boîte de dialogue au lieu d'utiliser les API de boîte de dialogue. Il suffit de créer une activité et de définir son thème sur Theme.Holo.Dialog dans la section dans l'élément <activity> élément manifeste :

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

Cependant, lorsque j'ai essayé de le faire, j'ai obtenu l'exception suivante :

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

Je soutiens ce qui suit, et je ne peux pas utiliser quelque chose de plus grand que 10 pour la valeur minimale :

minSdkVersion 10
targetSdkVersion 19

Dans mes styles, j'ai les éléments suivants :

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

Et dans mon manifeste, j'ai ceci pour l'activité :

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

Créer la boîte de dialogue de cette manière était quelque chose que j'espérais faire, car j'avais déjà terminé la mise en page.

Quelqu'un peut-il me dire comment contourner ce problème ?

0 votes

Utilisez-vous AppCompat de la bibliothèque d'appui ?

2 votes

@Raghunandan, je suis novice en la matière, mais en regardant mes styles, j'ai ce qui suit : <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> Et j'ai les importations suivantes : import Android.support.v7.app.ActionBarActivity ; import Android.support.v7.app.ActionBar ; import Android.support.v4.app.Fragment ; Mais je ne suis pas sûr de ce que tout cela signifie.

14 votes

Vous utilisez AppCompat qui forme la bibliothèque de support pour les barres d'action inférieures au niveau 11 de l'API. Il suffit d'utiliser android:theme="@style/AppTheme" > pour l'activité dans le manifeste

10voto

Vitaliy A Points 948

Dans mon cas, ce problème est apparu lorsque j'ai essayé d'afficher le dialogue. Le problème était dans le contexte, j'ai utilisé getBaseContext() qui devrait théoriquement renvoyer le contexte de l'activité, mais il semble que ce ne soit pas le cas, ou qu'il renvoie le contexte avant l'application de tout thème.

J'ai donc remplacé getBaseContexts() avec " este ", et cela fonctionne maintenant comme prévu.

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

10voto

Elyas Nategh Points 131

J'ai eu une activité à thème <android:theme="@android:style/Theme.Dialog"> utilisé pour afficher le dialogue dans mon appWidget et j'ai eu le même problème

J'ai résolu cette erreur en modifiant le code de l'activité comme suit :

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

10voto

danigonlinea Points 354

Vous en êtes arrivé là parce que vous voulez appliquer le Material Design dans le style de votre thème dans les versions précédentes du sdk jusqu'à 21. ActionBarActivity exige AppTheme Ainsi, si vous souhaitez également empêcher votre propre personnalisation de votre AppTheme, il vous suffit de modifier votre styles.xml (avant sdk 21) afin de pouvoir hériter d'un thème App Compat.

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

pour cela :

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

8voto

Peter Points 180

Pour moi, la solution consistait à utiliser ContextThemeWrapper :

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

de Android - Comment créer un FAB de manière programmatique ?

8voto

Wraithious Points 165

J'ai également eu ce problème et ce que j'ai fait pour le résoudre, tout en continuant à utiliser le thème Holo, c'est de suivre les étapes suivantes :

J'ai d'abord remplacé cette importation :

import android.support.v7.app.AppCompatActivity;

avec celui-ci :

import android.app.Activity;

puis j'ai changé mon extension de :

public class MyClass extends AppCompatActivity {//...

à cela :

public class MyClass extends Activity {//...

Il a également fallu modifier cette importation :

import android.support.v7.app.AlertDialog;

à cette importation :

import android.app.AlertDialog;

et vous pouvez ensuite utiliser votre balise de thème dans le manifeste au niveau de l'activité :

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

et enfin, (à moins que vous n'ayez d'autres classes dans votre projet qui doivent utiliser appCompat v7) vous pouvez soit nettoyer et reconstruire votre projet, soit supprimer cette entrée dans le fichier gradle build au niveau de l'application :

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

Si vous avez d'autres classes dans votre projet qui doivent utiliser la v7 appCompat, il suffit de nettoyer et de reconstruire le projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X