Vous devez utiliser un thème.Thème AppCompat (ou 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 voulez un dialogue personnalisé, vous pouvez à la place afficher une activité sous forme de dialogue au lieu d'utiliser le dialogue APIs. Créez simplement une activité et mettez son thème à thème.Holo.Dans la boîte de dialogue
l'élément de manifeste <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
cependant, quand j'ai essayé cela, j'ai eu l'exception suivante:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
je supporte 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 le texte suivant:
<!-- 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 comme ceci était quelque chose que je sautillais à faire, car j'ai déjà terminé la mise en page.
quelqu'un Peut-il me dire comment je peux contourner ce problème?
30 réponses
la raison pour laquelle vous avez ce problème est que l'activité que vous essayez d'appliquer le thème de dialogue est d'étendre ActionBarActivity
qui nécessite le thème AppCompat
à appliquer.
mise à jour : extension AppCompatActivity
aurait également ce problème
dans ce cas, changer L'héritage Java de ActionBarActivity
à Activity
et laisser le thème de dialogue dans le manifeste comme il est, un non Theme.AppCompat
valeur
la règle générale est que si vous voulez que votre code prenne en charge les anciennes versions D'Android, il devrait avoir le thème AppCompat
et le code java devrait étendre AppCompatActivity
. Si vous avez *une activité qui n'a pas besoin de ce soutien, comme vous ne vous souciez que des dernières versions et des fonctionnalités D'Android, vous pouvez appliquer n'importe quel thème à elle, mais le code java doit étendre simple Vieux Activity
.
NOTE: lorsqu'il y a passage de AppCompatActivity
(ou d'une sous-classe, ActionBarActivity
) à Activity
, il faut également changer les différents appels avec "support" à l'appel correspondant sans "support". Donc , au lieu de getSupportFragmentManager
, appelez getFragmentManager
.
Tout ce que vous devez faire est d'ajouter android:theme="@style/Theme.AppCompat.Light"
à votre étiquette de demande dans le fichier AndroidManifest.xml
.
copie de 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 du poteau et est arrivé après que j'ai ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style dans le manifeste. Mon problème a été résolu en changeant une référence de contexte dans l'alert builder - j'ai changé:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
à:
new android.support.v7.app.AlertDialog.Builder(this)
et plus de problèmes.
min sdk est 10. ActionBar
est disponible à partir du niveau api 11. Donc pour 10 vous utiliserez AppCompat
de la bibliothèque de soutien pour laquelle vous devez utiliser Theme.AppCompat
ou descendant de la même.
Utiliser
android:theme="@style/Theme.AppCompat" >
Ou si vous ne voulez pas de la barre d'action en haut
android:theme="@style/Theme.AppCompat.NoActionBar">
plus d'info @
http://developer.android.com/guide/topics/ui/actionbar.html
Edit:
j'ai peut-être mal lu op post.
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
.
ont aussi un attribut look @ Dialog dans le lien ci-dessous
cela a fonctionné pour moi, je viens de changer:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
à ceci:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
j'éprouvais ce problème même si mon thème était AppCompat
et mon activité était AppCompatActivity
(ou Activity
, comme suggéré dans les réponses d'autres). Alors j'ai nettoyé, reconstruit et relancé le projet.
( Build -> Nettoyage De Projet ; Build -> Projet De Reconstruction ; Exécuter -> Exécuter )
il peut sembler stupide, mais maintenant il fonctionne grand !
espérons que ça aide!
C'est ce qui l'a fixé pour moi: 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.AppCompat
, et est défini dans xml. Notez que le thème doit être placé avant super.onCreate
et setContentView
.
allez à vos styles et mettez le parent
parent="Theme.AppCompat"
au lieu de
parent="@android:style/Theme.Holo.Light"
dans mon cas, je n'ai pas de fichier values-v21 dans mon répertoire res. Puis je l'ai créé et y ai 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>
si vous avez besoin d'étendre ActionBarActivity vous avez besoin sur votre style.xml:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
Si vous définissez comme thème principal de votre application android:Thème.Matériel.Light au lieu de AppTheme.Base puis vous obtiendrez une "IllegalStateException: vous devez utiliser un thème.Thème AppCompat (ou descendant) avec cette activité" erreur.
changer le thème de l'activité désirée. Cela me convient:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
j'ai eu le même problème, mais il a résolu Quand je l'ai mis sur manifeste: 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>
j'ai eu un tel accident sur Samsung appareils même si l'activité a utilisé thème.AppCompat . La cause fondamentale était liée à des optimisations bizarres du côté de 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
ma solution était en train d'enlever android:launchMode="singleTask"
pour moi était la solution D'utiliser ContextThemeWrapper:
private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
Just Do
new AlertDialog.Builder(this)
au lieu de
new AlertDialog.Builder(getApplicationContext())
vous avez beaucoup de solutions à cette erreur.
-
Vous devez utiliser Activité ou FragmentActivity au lieu de ActionbarActivity ou AppCompatActivity
-
Si vous voulez utiliser ActionbarActivity ou AppCompatActivity , vous devez modifier dans style.xml thème.Holo.xxxx à thème.AppCompat.Light (si nécessaire, ajouter à DarkActionbar )
si vous n'avez pas besoin d'attributs avancés sur la barre d'action ou AppCompat vous n'avez pas besoin d'utiliser Actionbar ou AppCompat .
dans Android manifest juste changer le thème de l'activité à AppTheme comme suit code snippet
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">
</activity>
c'est quand vous voulez un AlertDialog dans un Fragment
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();
j'ai eu ce problème aussi bien et ce que j'ai fait pour le corriger, et toujours utiliser le thème Holo était de prendre ces mesures:
j'ai d'abord remplacé cette importation:
import android.support.v7.app.AppCompatActivity;
avec celui-ci:
import android.app.Activity;
puis changé mon extension de:
public class MyClass extends AppCompatActivity {//...
à ceci:
public class MyClass extends Activity {//...
et a également dû changer cette importation:
import android.support.v7.app.AlertDialog;
à cette importation:
import android.app.AlertDialog;
et ensuite vous pouvez utiliser votre étiquette thématique dans le manifeste au niveau de l'activité:
android:theme="@android:style/Theme.Holo.Dialog" />
et enfin, (sauf si vous avez d'autres classes dans votre projet qui doit utiliser v7 appCompat) vous pouvez soit nettoyer et reconstruire votre projet ou supprimer cette entrée dans le fichier de construction gradle au niveau de l'application:
compile 'com.android.support:appcompat-v7:23.2.1'
si vous avez d'autres classes dans votre projet qui doit utiliser v7 appCompat alors tout simplement nettoyer et reconstruire projet.
vous êtes venu à cela parce que vous voulez appliquer le Design matériel dans votre thème style dans les versions sdk précédentes à 21. ActionBarActivity
nécessite AppTheme
donc si vous voulez aussi empêcher votre propre personnalisation de votre Appthème, seulement vous devez changer dans vos styles.xml (antérieur au sdk 21) de cette façon, peut hériter pour un thème compat App.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
pour ceci:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
changez votre thème style parent en
parent="Theme.AppCompat"
ça a marché pour moi ...
celui-ci a travaillé pour moi:
<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>
Votre Activité est l'extension de ActionBarActivity qui exige que le AppCompat.thème à appliquer. Passer de Actionactivité à activité ou Fragmentactivité , il résoudra le problème.
si vous n'utilisez aucune barre D'Action alors:
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
solution rapide.
changez votre thème de base parent en styles.xml
remplacer de
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
à
<style name="AppTheme" parent="Theme.AppCompat">
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();
}
}
}
C'est la solution pour moi.
Cette solution a fonctionné pour moi.
bibliothèque de conception dépend de la prise en charge V4 et AppCompat bibliothèques de soutien, donc ne pas utiliser une version différente pour appcompat et bibliothèque de conception dans gradle.
utiliser
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:design:23.0.0'
au lieu de
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:design:23.1.0'
j'ai eu ce même problème. Parce que je créais un tiroir de navigation personnalisé. Mais j'oublie de mentionner le thème dans mon manifeste comme ceci
android:thème="@style/Thème.AppCompat.NoActionBar "
dès que j'ai ajouté le thème ci-dessus à mon manifeste il a résolu le problème.
pour moi, aucune des réponses ci-dessus n'a fonctionné même après que j'ai eu Theme.AppCompat
comme thème de base pour l'application. J'utilisais com.android.support:design:24.1.0
donc j'ai juste changé la version en 24.1.1
. Après la synchronisation de Grad, son fonctionnement à nouveau et l'exception a disparu. Il me semble que le problème était avec certaines versions plus anciennes de bibliothèques de soutien de conception.
je mets juste ça ici au cas où d'autres réponses ne fonctionnent pas pour certaines personnes.
dans mon cas, je gonflais une vue avec un contexte applicatif. Lorsque vous utilisez ApplicationContext, le thème / style n'est pas appliqué, donc bien qu'il y ait eu le thème.Appcompat dans mon style, il n'a pas été appliqué et a causé cette exception. Plus de détails: thème / Style n'est pas appliqué lorsque gonflant utilisé avec Applicationcontexte
mon activité avec SectionsPagerAdapter et ViewPager & Fragment
public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
@Override
public void onPostResume(){
super.onPostResume();
try {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}catch (NullPointerException ignored){
}
}