Question 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é en tant que boîte de dialogue au lieu d'utiliser les API de dialogue. Créez simplement une activité et définissez son thème sur Theme.Holo.Dialog dans la <activity> élément manifeste:

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

Cependant, quand j'ai essayé ceci, j'ai l'exception suivante:

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

Je suis en train de soutenir ce qui suit, et je ne peux pas utiliser quelque chose de plus grand que 10 pour le min:

minSdkVersion 10
targetSdkVersion 19

Dans mes styles, j'ai ce qui suit:

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

La création de la boîte de dialogue comme celle-ci était quelque chose que je voulais faire, car j'ai déjà terminé la mise en page.

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


770
2018-02-16 17:34


origine


Réponses:


La raison pour laquelle vous rencontrez ce problème est que l'activité à laquelle vous tentez d'appliquer le thème de dialogue s'étend ActionBarActivity ce qui nécessite la AppCompat thème à appliquer.

Mettre à jour: Extension AppCompatActivity aurait aussi ce problème

Dans ce cas, changez l'héritage Java de ActionBarActivity à Activity et laissez le thème de dialogue dans le manifeste tel qu'il est, un non Theme.AppCompat valeur


La règle générale est que si vous voulez que votre code supporte les anciennes versions d'Android, il devrait avoir le AppCompat thème et le code Java devrait étendre AppCompatActivity. Si vous avez * une activité qui n'a pas besoin de ce support, par exemple si vous ne vous souciez que des dernières versions et fonctionnalités d'Android, vous pouvez lui appliquer n'importe quel thème, mais le code java doit s'étendre Activity.


NOTE: Quand changer de AppCompatActivity (ou une sous-classe, ActionBarActivity), à Activity, doit également changer les différents appels avec "support" à l'appel correspondant sans pour autant "soutien". Donc, au lieu de getSupportFragmentManager, appel getFragmentManager.


974
2018-02-16 17:48



Tout ce que vous devez faire est d'ajouter android:theme="@style/Theme.AppCompat.Light" à votre tag d'application dans le AndroidManifest.xml fichier.


463
2017-09-04 10:44



Copier la réponse de @MarkKeen dans les commentaires ci-dessus car j'ai eu le même problème.

J'ai eu l'erreur indiquée en haut de la poste et est arrivé après que j'ai ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style pertinentes dans le manifeste. Mon problème a été résolu en changeant une référence de contexte dans le générateur d'alerte - j'ai changé:

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

à:

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

Et plus de problèmes.


164
2017-09-03 10:43



min sdk est 10. ActionBar est disponible à partir du niveau 11 de l'API. Donc, pour 10, vous utiliserez AppCompat de la bibliothèque de support pour laquelle vous devez utiliser Theme.AppCompat ou descendant de la même chose.

Utilisation

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

Ou si vous ne voulez pas de barre d'action en haut

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

Plus d'informations @

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

Modifier:

Je pourrais avoir mal lu poste.

Semble op veut un dialogue avec un thème d'activité. Donc, comme déjà suggéré par Bobbake4 étendre Activity au lieu de ActionBarActivity.

Avoir aussi un look @ Attributs de dialogue dans le lien ci-dessous

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


82
2018-02-16 17:36



Cela a fonctionné pour moi, j'ai juste changé:

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

pour ça:

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

61
2017-10-21 20:27



J'éprouvais ce problème même si mon thème était un AppCompat Thème et mon activité était un AppCompatActivity (ou Activity, comme suggéré sur les réponses des autres). J'ai donc nettoyé, reconstruit et réexécuté le projet.

(Construire -> Projet propre; Construire -> Reconstruire le projet; Exécuter -> Exécuter)

Cela peut sembler stupide, mais maintenant fonctionne très bien!

J'espère juste que ça aide!


30
2018-04-29 05:10



C'est ce qui m'a arrangé: au lieu de spécifier le thème dans le manifeste, je l'ai défini dans onCreate pour chaque activité qui s'étend ActionBarActivity:

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

Ici MyAppTheme est un descendant de Theme.AppCompatet est défini dans xml. Notez que le thème doit être défini avant super.onCreate et setContentView.


22
2018-01-14 21:37



aller à vos styles et mettre le parent

parent="Theme.AppCompat"

au lieu de

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

17
2017-12-03 10:45



Dans mon cas, je n'ai pas de fichier values-v21 dans mon répertoire res. Ensuite, je l'ai créé et ajouté les codes suivants:

  <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
2018-06-23 09:04