Ich arbeite an der Verwendung der neu hinzugefügten Symbolleiste, die in Lollipop und der AppCompat-v7-Bibliothek eingeführt wurde. Ich folgte dieser Anleitung beim Einrichten der Symbolleiste befolgt. Beim Aufrufen von etwas, das die kontextbezogene Aktionsleiste aufruft (z. B. Hervorheben von Text zum Kopieren / Einfügen), wird die Symbolleiste auf der Seite nach unten gedrückt. Sie können im Bild unten auf der Seite sehen, wovon ich spreche:
Also habe ich es im Wesentlichen so eingerichtet. Ich habe die Symbolleiste in einer XML-Datei definiert, die ich mit Include-Tags verwende:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Dann instanziiere ich es aus meiner Sicht:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
Im Code habe ich es so eingerichtet:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Weiß jemand, wie man es so macht, dass die Contextual ActionBar über die Symbolleiste kommt?
Antworten:
Aktualisieren:
Lösung: Verwenden Sie die Eigenschaft windowActionModeOverlay . Stellen Sie dies in Ihrem Thema ein:
und der Aktionsmodus wird über der Aktionsleiste angezeigt, anstatt ihn nach unten zu drücken. (Wenn Sie nicht das neueste AppCompat verwenden, müssen Sie der Eigenschaft das Präfix "android:" hinzufügen.) Grundsätzlich wird AppCompat darüber informiert, dass sich oben auf dem Bildschirm eine Symbolleiste befindet und dass der ActionMode darüber gezeichnet werden soll.
Alte Antwort / Problemumgehung:
Ich bin auf das gleiche Problem gestoßen. Unabhängig davon, welches Thema ich festgelegt habe, wird die als Aktionsleiste festgelegte Symbolleiste immer nach unten gedrückt. Ich habe es mit und ohne Support-Bibliothek versucht, aber es war egal.
Leider konnte ich das Problem nicht beheben, daher habe ich stattdessen eine Problemumgehung erstellt. In meinem
ActionModeCallback
‚sonCreateActionMode
ich die Aktionsleiste verstecken:und in
onDestroyActionMode
zeige ich es nochmal:Das Ausblenden / Anzeigen geschieht so schnell, dass es auf meinen Testgeräten nicht auffällt. Es gibt natürlich einen Nachteil: Obwohl die Enter-Animation immer noch funktioniert, geht die Exit-Animation der kontextbezogenen Aktionsleiste verloren, da die Symbolleiste sofort darüber erscheint. Aber bis wir auf eine bessere Lösung stoßen, bleiben wir wohl dabei.
(Meine Aktivität erweitert tatsächlich eine benutzerdefinierte
BaseActivity
Klasse, deren MethodegetActionBarToolbar()
aus dem Quellcode der Google I / O 2014-App stammt , sodass ich die Symbolleiste problemlos abrufen kann:Schade, dass die E / A-App die kontextbezogene Aktionsleiste nicht verwendet.)
quelle
Starten Sie es nicht in Ihrer Aktivität, sondern in Ihrer Symbolleiste. In Ihrer Aktivität:
und du musst verwenden
quelle
AppCompatActivity.startSupportActionMode(callback)
, Kompatibilität mit Attributen wieapp:iconTint
im Menüpunkt xmls zu erhalten.Nur eine kleine Ergänzung: Für
super.onCreate(savedInstanceState)
Um zu arbeiten, ist es wichtig, VOR dem Anruf anzurufensetContentView(R.layout.your_activity)
Ihrer Aktivität . In diesem Fall macht es wirklich einen Unterschied!quelle
In meinem Fall
<item name="windowActionModeOverlay">true</item>
hat nicht funktioniert, aber diese Arbeit :<item name="android:windowActionModeOverlay">true</item>
, dasandroid
ist der Schlüssel.quelle
<item name="windowActionModeOverlay">true</item>
mit der Appcompat-Symbolleiste, andernfalls verwenden Sie denandroid
Namespace.Jacobs Lösung funktionierte für mich, aber die kontextbezogene ActionBar war transparent und die Symbolleiste durch sie sichtbar. Dies kann wie folgt gelöst werden:
Das Thema "AppTheme.Base" muss auf die Symbolleiste angewendet werden.
Weitere Details zum kontextbezogenen ActionBar-Styling:
Anpassen der Kontextaktionsleiste mithilfe von appCompat im Materialdesign
quelle
Sehr nützliche Methode, um die Symbolleiste nach vorne zu bringen
toolbar.bringToFront()
quelle
View.bringToFront()
ist ein sehr schwerer Betrieb und sollte generell um jeden Preis vermieden werden.Ein weiterer kleiner Zusatz: Stellen Sie sicher, dass in der Aktivität mindestens ein leerer Bildschirm festgelegt ist,
setContentView(R.layout.empty_screen)
wenn Sie die gesamte Benutzeroberfläche in Fragmenten laden (ft.replace(android.R.id.content, fragment)
).quelle