requestFeature () doit être appelé avant d’append du contenu

J’essaie d’implémenter un titre personnalisé:

Voici ma classe d’assistance:

import android.app.Activity; import android.view.Window; public class UIHelper { public static void setupTitleBar(Activity c) { final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); c.setContentView(R.layout.main); if (customTitleSupported) { c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar); } } } 

Voici où je l’appelle dans onCreate ():

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupUI(); } private void setupUI(){ setContentView(R.layout.main); UIHelper.setupTitleBar(this); } 

Mais j’ai l’erreur:

 requestFeature() must be called before adding content 

Eh bien, faites simplement ce que le message d’erreur vous dit.

setContentView() pas setContentView() avant requestFeature() .

Remarque:

Comme indiqué dans les commentaires, pour la bibliothèque ActionBarSherlock et AppCompat , il est nécessaire d’appeler requestFeature() avant super.onCreate()

Je sais qu’il a plus d’un an, mais appeler requestFeature() n’a jamais résolu mon problème. En fait, je ne l’appelle pas du tout.

C’était un problème de gonfler la vue je suppose. Malgré toutes mes recherches, je n’ai jamais trouvé de solution convenable avant de jouer avec les différentes méthodes de gonflement d’une vue.

AlertDialog.Builder est la solution simple mais nécessite beaucoup de travail si vous utilisez onPrepareDialog() pour mettre à jour cette vue.

Une autre solution consiste à utiliser AsyncTask pour les dialogs.

Une solution finale que j’ai utilisée est ci-dessous:

 public class CustomDialog extends AlertDialog { private View content; public CustomDialog(Context context) { super(context); LayoutInflater li = LayoutInflater.from(context); content = li.inflate(R.layout.custom_view, null); setUpAdditionalStuff(); // do more view cleanup setView(content); } private void setUpAdditionalStuff() { // ... } // Call ((CustomDialog) dialog).prepare() in the onPrepareDialog() method public void prepare() { setTitle(R.ssortingng.custom_title); setIcon( getIcon() ); // ... } } 

* Quelques notes supplémentaires:

  1. Ne comptez pas sur le fait de cacher le titre. Il y a souvent un espace vide malgré que le titre ne soit pas défini.
  2. N’essayez pas de créer votre propre vue avec le pied de page et la vue du milieu. L’en-tête, comme indiqué ci-dessus, peut ne pas être entièrement caché malgré la requête FEATURE_NO_TITLE.
  3. Ne modifiez pas fortement votre vue de contenu avec des atsortingbuts de couleur ou une taille de texte. Laissez le dialog gérer cela, sinon vous risquez de mettre du texte noir sur une boîte de dialog bleu foncé parce que le fournisseur a inversé les couleurs.

Je prolongeais un DialogFragment et la réponse ci-dessus ne fonctionnait pas. J’ai dû utiliser getDialog () pour réaliser le retrait du titre:

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

L’erreur ne vous dit-elle pas exactement ce qui ne va pas? Vous appelez requestWindowFeature et setFeatureInt après avoir appelé setContentView .

Au fait, pourquoi appelez-vous setContentView deux fois?

Pour les versions 23 et supérieures du kit de développement logiciel, la même exception RuntimeException est émise si vous utilisez AppCompatActivity pour étendre votre activité. Cela n’arrivera pas si votre activité dérive directement de l’activité.

Ceci est un problème connu sur Google, comme mentionné dans https://code.google.com/p/android/issues/detail?id=186440

Le travail autour de cela est d’utiliser la méthode supportRequestWindowFeature () au lieu d’utiliser requestFeature ().

S’il vous plait, soulignez si cela résout votre problème.

Modifiez la version de Comstack SDK, version du SDK cible en version Build Tools à 24.0.0 dans build.gradle si vous rencontrez un problème dans la demande