J'essaye d'implémenter une barre de titre personnalisée:
Voici ma classe Helper:
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'obtiens l'erreur:
requestFeature() must be called before adding content
android
android-layout
android-activity
Sheehan Alam
la source
la source
Réponses:
Eh bien, faites simplement ce que le message d'erreur vous indique.
N'appelez pas
setContentView()
avantrequestFeature()
.Remarque:
Comme indiqué dans les commentaires, pour les deux
ActionBarSherlock
et laAppCompat
bibliothèque, il est nécessaire d'appelerrequestFeature()
avantsuper.onCreate()
la source
requestFeature()
avantsuper.onCreate()
. Référence: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
pour le masquer, puissetContentView()
pour votre première mise en page, puisrequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
pour afficher à nouveau la barre de titre. Ce serait aprèssetContentView()
la deuxième fois.requestFeature
avantsuper.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 pour gonfler la vue, je suppose. Malgré toutes mes recherches, je n'ai jamais trouvé de solution appropriée jusqu'à ce que je joue avec les différentes méthodes pour gonfler 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 alternative consiste à utiliser AsyncTask pour les dialogues.
Une solution finale que j'ai utilisée est ci-dessous:
* Quelques notes supplémentaires:
la source
content = inflater.inflate(R.layout.custom_view, null);
devrait probablement l'êtrecontent = li.inflate(R.layout.custom_view, null);
. Donc,inflater
doit être remplacé parli
.J'étendais un DialogFragment et la réponse ci-dessus n'a pas fonctionné. J'ai dû utiliser getDialog () pour supprimer le titre:
la source
L'erreur ne vous dit-elle pas exactement ce qui ne va pas? Vous appelez
requestWindowFeature
etsetFeatureInt
après avoir appelésetContentView
.Au fait, pourquoi appelez-vous
setContentView
deux fois?la source
Pour SDK version 23 et supérieure, la même RuntimeException est levée si vous utilisez AppCompatActivity pour étendre votre activité. Cela ne se produira pas si votre activité découle directement de l'activité.
Il s'agit d'un problème connu sur Google, comme mentionné dans https://code.google.com/p/android/issues/detail?id=186440
Le contournement fourni pour cela consiste à utiliser la méthode supportRequestWindowFeature () au lieu d'utiliser requestFeature ().
Veuillez voter pour si cela résout votre problème.
la source
Changer la Version Compile SDK , SDK version cible à Outils de compilation dont à 24.0.0 dans build.gradle si u face à problème dans la demande Fonction
la source
Dans mon cas , je l' ai montré
DialogFragment
dansActivity
. Dans ce fragment de dialogue, j'ai écrit comme dans DialogFragment supprimer la bordure noire :Soit remove
setStyle(STYLE_NO_FRAME, 0)
in,onCreate()
soit chande / removeonCreateDialog
. Parce que les paramètres de la boîte de dialogue ont changé après la création de la boîte de dialogue.la source
J'ai eu ce problème avec les dialogues basés sur un DialogFragment étendu qui fonctionnait bien sur les appareils exécutant l'API 26 mais a échoué avec l'API 23. Les stratégies ci-dessus n'ont pas fonctionné mais j'ai résolu le problème en supprimant la méthode onCreateView (qui avait été ajoutée par un plus récent modèle Android Studio) à partir de DialogFragment et création de la boîte de dialogue dans onCreateDialog.
la source