Ich habe gerade meine Codebasis auf Lollipop aktualisiert und habe Probleme mit der Aktionsleiste. Ich verwende AppCompat und ActionBarActivity und fülle eine benutzerdefinierte Ansicht auf. Es scheint, dass die benutzerdefinierte Ansicht nicht mehr die gesamte Breite des Bildschirms einnimmt und links einen dünnen Streifen hinterlässt
So sah es früher aus
So sieht es jetzt aus
Dies ist der Code, mit dem ich die Aktionsleiste einrichte. Hat jemand irgendwelche Ideen?
final ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setCustomView(R.layout.action_bar_content_search_custom_view);
actionBar.setBackgroundDrawable(null);
// actionBar.setStackedBackgroundDrawable(null);
TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_title);
title.setText(R.string.youtube);
ImageView back = (ImageView) actionBar.getCustomView().findViewById(R.id.action_bar_back);
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
Bearbeiten
Das Herausnehmen der benutzerdefinierten Ansicht und das Ändern des Hintergrunds nimmt jetzt die gesamte Breite ein. Das Problem ist also, wie kann eine CustomView die gesamte Breite der ActionBar einnehmen?
android
android-actionbar
android-appcompat
android-5.0-lollipop
Stevie Kideckel
quelle
quelle
appcompat-v7
.ImageView
. Versuchen Sie zunächst, es zu deaktivieren.Antworten:
Dies scheint auf die letzten Änderungen
ActionBar
im letztenappcompat-v7
Update zurückzuführen zu sein. Es scheint, dass es erhebliche Änderungen im Umgang mit Aktionsleisten gibt.Ich hatte das gleiche Problem und fand nach dem Lesen der
ActionBar
Dokumentation und insbesondere des folgenden Zitats eine Lösung.So wie ich es sehe, wurden die
AppCompat
Themen geändert und einerseits schienen einige Dinge zu brechen, andererseits bieten sie viel mehr Flexibilität. Ich empfehle folgende Schritte:.NoActionBar
Stil in Ihrer Aktivität, wie im obigen Zitat beschriebenandroid.support.v7.widget.Toolbar
Ihrem Aktivitätslayout ein hinzuapp:contentInsetStart="0dp"
Attribut fest. Dies ist das Hauptproblem mit dem Rand, den Sie in Ihrer Frage beschreibenEs wird normalerweise empfohlen, dies in einer separaten Layoutdatei zu tun und
include
in Ihrem Aktivitätslayout zu verwenden, sodass Sie die Symbolleiste nur an einer Stelle anpassen müssen, wenn Sie sie in mehreren Aktivitäten verwendenfindViewById
undsetSupportActionBar
in Ihrer AktivitätonCreate
zusignal to the Activity which Toolbar should be treated as the Activity's action bar
onCreateOptionsMenu
zur Symbolleiste hinzugefügt und als Aktivitätsaktionsleiste behandelt.quelle
Error inflating class fragment
xmlns:app="http://schemas.android.com/apk/res-auto"
setCustomView
. Erstellen Sie einfach eine Layoutdatei mit den Widgets, die Sie in Ihre Symbolleiste aufnehmen möchten (z. B. fügen Sie der in Abschnitt 3 der Antwort beschriebenen LayoutdateiAnstatt so viel zu arbeiten, wie von Muzikant erwähnt, und diese Antwort zu mögen
Sie müssen nur die letzten beiden Codezeilen hinzufügen, um Ihr Problem zu lösen.
Ich hoffe, das könnte Ihnen und anderen helfen.
Fügen Sie diese vier Zeilen zum obigen Code hinzu, sodass der rechte Seitenabstand auch von der Unterstützungsaktionsleiste entfernt wird.
quelle
Ich denke, das kann man auch in Stilen machen. Versuche dies. habe es auf kitkat getestet
quelle
Keine der anderen Antworten hat bei mir funktioniert, daher habe ich mir die tatsächlichen AppCompat v7-Stile angesehen, die hier zu finden sind .
Wenn Sie sich den Base.Widget.AppCompat.ActionBar-Stil ansehen, hat er:
Natürlich müssen wir diese Eigenschaften nur in unserem eigenen Aktionsleistenstil überschreiben:
Das hat bei mir super geklappt, hoffe es hilft auch anderen.
quelle
Nachdem ich meinen Kopf gegen den Monitor geschlagen hatte, funktionierte dies für mich
Das getCustomView (). GetParent () hat den Trick gemacht
quelle
Ich bin heute auch auf dieses Problem gestoßen, dann habe ich herausgefunden, dass ich
res/values-v21/styles.xml
in meinem Projekt etwas habe, das automatisch von Android Studio generiert wurde, und das ist die Ursache.Warum?
Weil mein
res/values-v21/styles.xml
Inhalt war:Und mein
res/values/styles.xml
enthielt so etwas wie:Als ich dann meine App auf Lollipop ausführte,
res/values-v21/styles.xml
wurde die verwendet, und das verursachte genau das Problem, das OP hatte. Also bin ich zu einem einfachen Fix gekommen, der nur löscht:im
res/values-v21/styles.xml
quelle
auf den Punkt:
Stellen Sie sicher, dass Sie die richtige Symbolleiste importieren -
android.support.v7.widget.Toolbar;
quelle
Schreiben Sie diese beiden Zeilen zusätzlich mit Ihrem Code
quelle