Die Kompatibilität ActionBarActivity
mit der Aktionsleiste wurde der Support-Bibliothek, Version 18, hinzugefügt. Sie verfügt jetzt über eine Klasse zum Erstellen von Aktivitäten mit der Aktionsleiste auf älteren Android-Versionen.
Gibt es eine Möglichkeit, die Aktionsleiste aus der Support-Bibliothek hinzuzufügen PreferenceActivity
?
Zuvor habe ich ActionBarSherlock verwendet und es hat SherlockPreferenceActivity
.
Antworten:
BEARBEITEN: In appcompat-v7 22.1.0 hat Google die abstrakte AppCompatDelegate-Klasse als Delegat hinzugefügt, mit dem Sie die Unterstützung von AppCompat auf alle Aktivitäten ausweiten können.
Verwenden Sie es so:
Kein Hacken mehr. Code aus AppCompatPreferenceActivity.java .
quelle
(ViewGroup) getWindow().getDecorView().getRootView()
Mit AppCompat ist dies derzeit nicht möglich. Ich habe intern einen Fehler geöffnet.
quelle
PreferenceActivity
, hinzugefügt zu werdenActionBarCompat
?Ich habe es geschafft, eine Problemumgehung zu erstellen, die der im Google Play Store verwendeten ähnelt. Link zur Originalantwort
Das GitHub Repo finden Sie hier
Sehr ähnlich zu Ihrem eigenen Code, aber XML hinzugefügt, um den festgelegten Titel zu ermöglichen:
Weiterverwendung
PreferenceActivity
:settings_toolbar.xml :
SettingsActivity.java :
Result :
UPDATE (Lebkuchen-Kompatibilität):
Wie hier ausgeführt , geben Gingerbread Devices in dieser Zeile NullPointerException zurück:
FIX:
SettingsActivity.java :
Alle Probleme mit den oben genannten lassen Sie es mich wissen!
UPDATE 2: TINTING WORKAROUND
Wie in vielen Entwicklungsnotizen erwähnt, wird
PreferenceActivity
das Abtönen von Elementen nicht unterstützt. Wenn Sie jedoch einige interne Klassen verwenden, können Sie dies erreichen. Bis diese Klassen entfernt werden. (Funktioniert mit appCompat support-v7 v21.0.3).Fügen Sie die folgenden Importe hinzu:
Überschreiben Sie dann die
onCreateView
Methode:Result:
AppCompat 22.1
AppCompat 22.1 führte neue getönte Elemente ein, sodass die internen Klassen nicht mehr verwendet werden müssen, um den gleichen Effekt wie beim letzten Update zu erzielen. Folgen Sie stattdessen diesem (immer noch überschreibenden
onCreateView
):NESTED PREFERENCE SCREENS
Viele Leute haben Probleme mit der Aufnahme der Symbolleiste in verschachtelte
<PreferenceScreen />
s, aber ich habe eine Lösung gefunden !! - Nach viel Versuch und Irrtum!Fügen Sie Folgendes hinzu
SettingsActivity
:Der Grund dafür
PreferenceScreen
ist, dass sie als Wrapper-Dialogfeld basieren. Daher müssen wir das Dialogfeld-Layout erfassen, um die Symbolleiste hinzuzufügen.Symbolleistenschatten
Durch das Importieren von Designs ist das
Toolbar
Aufheben und Abschatten in Geräten vor Version 21 nicht möglich. Wenn Sie also eine Höhe auf Ihrem Gerät haben möchten, müssenToolbar
Sie diese in Folgendes einschließenAppBarLayout
:`settings_toolbar.xml:
Nicht zu vergessen, dass Sie die Design Support-Bibliothek als Abhängigkeit in der
build.gradle
Datei hinzufügen :Android 6.0
Ich habe das gemeldete überlappende Problem untersucht und kann das Problem nicht reproduzieren.
Der oben verwendete vollständige Code erzeugt Folgendes:
Wenn mir etwas fehlt, lass es mich bitte über dieses Repo wissen und ich werde es untersuchen.
quelle
:)
PreferenceActivity
so ein Schmerz im Arsch zu benutzen ? Es soll Zeit sparen. Ich könnte genauso gut eine regelmäßige Aktivität durchführen und alle Einstellungen manuell in einem linearen Layout selbst anordnen. Fuuuuck!Es wurde eine PreferenceFragment-Implementierung basierend auf support-v4 Fragment gefunden:
https://github.com/kolavar/android-support-v4-preferencefragment
Edit: Ich habe es gerade getestet und es funktioniert super!
quelle
Eine Integration
PreferenceActivity
in ABC ist zumindest für mich nicht möglich. Ich habe die beiden Möglichkeiten ausprobiert, die ich finden konnte, aber keine hat funktioniert:Option 1:
ActionBarPreferenceActivity
erstreckt sichPreferenceActivity
. Wenn Sie dies tun, werden Sie durch eingeschränktActionBarActivityDelegate.createDelegate(ActionBarActivity activity)
. Auch müssen Sie implementierenActionBar.Callbacks
die nicht zugegriffen werden kannOption 2:
ActionBarPreferenceActivity
erstreckt sichActionBarActivity
. Dieser Ansatz erfordert Umschreiben eine ganz neuePreferenceActivity
,PreferenceManager
und sein kann ,PreferenceFragment
das heißt , Sie Zugriff auf versteckte Klassen wie müssencom.android.internal.util.XmlUtils
die Lösung dieses kann nur von Google kommen Devs eine Implementierung ,ActionBarWrapper
die auf jede Aktivität hinzugefügt werden können.Wenn Sie wirklich eine Präferenzaktivität benötigen, ist mein Rat für den Moment
ActionBarSherlock
.Es ist mir jedoch gelungen, es hier umzusetzen .
quelle
Problem Hintergrund:
Das OP möchte wissen, wie wir
MenuItem
s in dasActionBar
von setzen könnenPreferenceActivity
für Pre-Honeycomb weil Android Support - Bibliothek hat einen Fehler , der nicht dies geschehen läßt.Meine Lösung:
Ich habe einen viel saubereren Weg gefunden, als bereits vorgeschlagen, um das Ziel zu erreichen (und habe es in den Android-Dokumenten gefunden ):
Tun Sie jetzt, was Sie normalerweise in Ihrem tun würden
onOptionsItemSelected()
. Da es Teil von Android Docs ist, hat es keine Nebenwirkungen.Viel Spaß beim Codieren. :) :)
Aktualisieren:
Diese Lösung funktioniert nicht mehr, wenn Sie auf Lollipop abzielen. Wenn Sie AppCompat verwenden, ist diese Antwort genau das, wonach Sie suchen sollten.
quelle
PreferencesActivity
es keine Möglichkeit gab, Gegenstände zu platzierenActionBar
, insbesondere den Zurück-Button. Meine Antwort ist eine gute Lösung dafür.:)
Ich konnte damit
android.app.Actionbar
umgehengetActionBar()
. Zuerst wurde ein Nullwert zurückgegeben ... dann ging ich zum Manifest und änderte das Thema in:Dann konnte ich die Actionbar wieder haben. Ich gehe davon aus, dass dies nur für bestimmte Build-Levels funktioniert. Daher möchten Sie möglicherweise die Build-Nummer überprüfen oder prüfen, ob der zurückgegebene Wert null ist.
Es wird gut für mich sein, weil die App, an der ich arbeite, für
ICS/4.0
+ ist.quelle
Jetzt wurde die offizielle Antwort auf dieses Problem veröffentlicht. Es ist die v7 / v14-Einstellungsunterstützung Bibliothek.
Siehe Verwenden der v7 / v14 Preference Support-Bibliothek. für die Diskussion, wie man es benutzt.
quelle