Ich versuche, eine benutzerdefinierte Titelleiste zu implementieren:
Hier ist meine Helferklasse:
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);
}
}
}
Hier rufe ich es in onCreate () auf:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupUI();
}
private void setupUI(){
setContentView(R.layout.main);
UIHelper.setupTitleBar(this);
}
Aber ich bekomme den Fehler:
requestFeature() must be called before adding content
android
android-layout
android-activity
Sheehan Alam
quelle
quelle
Antworten:
Tun Sie einfach, was Ihnen die Fehlermeldung sagt.
Rufen Sie nicht
setContentView()
vorher anrequestFeature()
.Hinweis:
Wie in den Kommentaren gesagt, für beide
ActionBarSherlock
undAppCompat
Bibliothek, ist es notwendig , nennenrequestFeature()
vorsuper.onCreate()
quelle
requestFeature()
vorher aufzurufensuper.onCreate()
. Referenz: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
ausblenden, dannsetContentView()
für Ihr erstes Layout und dannrequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
die Titelleiste wieder anzeigen. Das wäre nachsetContentView()
dem zweiten Mal.requestFeature
vorher anrufensuper.onCreate()
Ich weiß, dass es über ein Jahr alt ist, aber das Anrufen
requestFeature()
hat mein Problem nie gelöst. Tatsächlich nenne ich es überhaupt nicht.Ich nehme an, es war ein Problem, die Sicht aufzublähen. Trotz all meiner Suche habe ich nie eine geeignete Lösung gefunden, bis ich mit den verschiedenen Methoden zum Aufblasen einer Ansicht herumgespielt habe.
AlertDialog.Builder ist die einfache Lösung, erfordert jedoch viel Arbeit, wenn Sie diese
onPrepareDialog()
zum Aktualisieren dieser Ansicht verwenden.Eine andere Alternative besteht darin, AsyncTask für Dialoge zu nutzen.
Eine endgültige Lösung, die ich verwendet habe, ist unten:
* Einige zusätzliche Hinweise:
quelle
content = inflater.inflate(R.layout.custom_view, null);
sollte wahrscheinlich seincontent = li.inflate(R.layout.custom_view, null);
. Mussinflater
also durch ersetzt werdenli
.Ich habe ein DialogFragment erweitert und die obige Antwort hat nicht funktioniert. Ich musste getDialog () verwenden, um den Titel zu entfernen:
quelle
Sagt Ihnen der Fehler nicht genau, was falsch ist? Sie rufen an
requestWindowFeature
undsetFeatureInt
nachdem Sie angerufen habensetContentView
.Warum rufst du übrigens
setContentView
zweimal an?quelle
Ab SDK Version 23 wird dieselbe RuntimeException ausgelöst, wenn Sie AppCompatActivity zum Erweitern Ihrer Aktivität verwenden. Es wird nicht passieren, wenn Ihre Aktivität direkt von Aktivität abgeleitet ist.
Dies ist ein bekanntes Problem bei Google, wie unter https://code.google.com/p/android/issues/detail?id=186440 erwähnt
Die dafür vorgesehene Problemumgehung besteht darin, die supportRequestWindowFeature () -Methode anstelle von requestFeature () zu verwenden.
Bitte stimmen Sie ab, wenn es Ihr Problem löst.
quelle
Ändern Sie die Compile SDK-Version und die Target SDK-Version in Build Tools auf 24.0.0 in build.gradle, wenn Sie Probleme mit der Anforderungsfunktion haben
quelle
In meinem Fall habe ich gezeigt ,
DialogFragment
inActivity
. In diesem Dialogfragment, das ich wie in DialogFragment geschrieben habe, entfernen Sie den schwarzen Rand :Entweder entfernen
setStyle(STYLE_NO_FRAME, 0)
inonCreate()
oder chande / entfernenonCreateDialog
. Weil sich die Dialogeinstellungen geändert haben, nachdem der Dialog erstellt wurde.quelle
Ich hatte dieses Problem mit Dialogen, die auf einem erweiterten DialogFragment basierten, das auf Geräten mit API 26 einwandfrei funktionierte, aber mit API 23 fehlschlug. Die oben genannten Strategien funktionierten nicht, aber ich löste das Problem, indem ich die onCreateView-Methode entfernte (die durch eine weitere hinzugefügt wurde aktuelle Android Studio-Vorlage) aus dem DialogFragment und Erstellen des Dialogfelds in onCreateDialog.
quelle