Je viens de mettre à niveau mon application pour utiliser la nouvelle version v22.1.0 AppCompat et je reçois maintenant l'exception suivante lorsque j'ouvre mon application.
Caused by: Java.lang.IllegalArgumentException: AppCompat does not support the current theme features
at Android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.Java:360)
at Android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:246)
at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:106)
Comment je le répare?
AppCompat est désormais plus strict sur ce qu'il attend des indicateurs de la fenêtre de thème et correspond plus étroitement à ce que vous obtiendriez du cadre.
La raison principale derrière ceci est de supporter AppCompatDialogs que nous avons également ajouté dans cette version. Ils font un usage intensif du drapeau windowNoTitle
, auquel AppCompat ne prêtait pas beaucoup d’attention auparavant.
Donc, pour résoudre votre problème, vous avez deux options:
Le moyen le plus simple est d’utiliser Theme.AppCompat.NoActionBar
comme thème parent. Cela fera toujours la bonne chose.
Si vous ne pouvez pas le faire cependant (vous devez peut-être prendre en charge la barre d'action et aucune barre d'action), procédez comme suit:
<style name="MyTheme" parent="Theme.AppCompat">
...
</style>
<style name="MyTheme.NoActionBar">
<!-- Both of these are needed -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Vous devriez être sur la bonne voie maintenant.
Ceux qui ont encore des erreurs après toutes ces corrections.
S'il vous plaît hériter de
Theme.AppCompat.Light.NoActionBar
et ne pas utiliser
<item name="windowActionBar">false</item>
Ensuite, vous n'obtiendrez aucune erreur.
J'ai ajouté
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
mais ce n'était pas suffisant. Enfin, le déplacement de super.onCreate avant setContentView dans Activity - a corrigé mon problème :)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.v2_main_dash);
...
Il suffit de l'utiliser dans votre style.xml
dans le dossier values-v21, aucune autre édition n'est nécessaire.
<style name="AppTheme" parent="Theme.AppCompat">
<!-- theme customizations -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
N'ajoutez rien dans le fichier d'activité s'il vous plaît laissez-le
public class Main extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}