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