Die Anwendung AppCompat Thema an die individuellen Präferenzen in eine PreferenceFragment
Ich habe wrestling mit versucht, meine PreferenceFragment
haben das gleiche Material-based Design und styling (via AppCompat) wie der rest meiner Bewerbung. Die PreferenceFragment
an, dass ich zum verwalten aller meiner Einstellungen ist unten dargestellt:
Wie Sie sehen können aus dem screenshot oben, ich war in der Lage, anpassen die PreferenceFragment
mithilfe colorAccent
, colorPrimary
, und ein paar andere Attribute. Mein Thema für die PreferenceFragment
ist wie folgt:
<style
name="settingsTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/blue_grey_500</item>
<item name="colorAccent">@color/blue_grey_500</item>
<item name="android:textColor">@color/black_text_alt</item>
<item name="android:textColorSecondary">@color/black_secondary_text</item>
</style>
Jedoch, trotz meiner Bemühungen, ich bin nicht in der Lage, zu Themen anwenden, um die einzelnen Elemente innerhalb meiner PreferenceFragment
wie ListPreference
und EditTextPreference
; alle Einstellungen bleiben trotzdem die standard-AppCompat Thema:
Fand ich einen 2 Jahre alten Beitrag auf und diskutiert dieses Problem, wenn auch mit keine wirkliche Lösung: Wie bewerben Thema zu <PreferenceScreen> - Elemente der ein <PreferenceCategory>
Frage ich mich, wenn jemand in der Lage, erfolgreich anwenden von Designs auf die Vorlieben da AppComat V21 veröffentlicht wurde. Wenn nicht, gibt es keine praktikable Problemumgehungen, die verwendet werden können, zu übernehmen eigene Themen, die an die individuellen Präferenzen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: ich aus einer Bibliothek in die Schlacht mit dem Problem (verwendet AppCompat r22): https://github.com/consp1racy/android-support-preference
Den
ListPreference
erstrecktDialogPreference
verwendet dieses Stück code, um das Dialogfeld erstellen:Wie Sie sehen können die
AlertDialog.Builder
Konstruktor ist nicht im Lieferumfang des optionalen zweitenint theme
parameter. Das bedeutet, dass der dialog Themen-von was auch immer Ihre Tätigkeit ist das Thema in seinerandroid:alertDialogTheme
Attribut.Erstellen Sie nun eine benutzerdefinierte Design für Ihre dialog-das ergibt sich aus
Theme.AppCompat.Dialog
etwa so:Problem 1: Die oben genannte Lösung funktioniert nicht für
RingtonePreference
weil es nicht verlängernListPreference
aber Anrufe von Klingelton-Auswahl auf Vorsatz, so ist es immer Themen-je nach system. Überprüfen Sie heraus diese Antwort:RingtonePreference Thema So können wir markieren diese als gelöst.
Problem 2: Der AppCompat-Dialoge fehlen Titel. Und bisher habe ich noch keinen Weg gefunden, dieses Problem zu beheben. Wahr, dass ich bin nicht auf der Suche schwer genug. Wir ignorieren die Titel fehlen da ein kleines Problem.
Problem 3: Den radio-button drawables sind nicht mutiert, so dass die Grafiken sind inkonsistent zwischen passiv und aktiv (farbig) Zustand - sind alle farbigen (nicht nur die, die Sie!erneut drücken) oder alle sind Grau. Nun, das ist wirklich ärgerlich
Probleme 2 & 3 gezwungen, mich auf eine andere Strecke - mein-dialog-theme sieht aus wie das auf API 14+
und wie diese auf API-21+
Diese Werte wurden experimentell gewonnen durch kriechen über die Plattform source-Dateien und auch getestet.
Der Punkt ist, dass die einzige zuverlässige Lösung zu sein scheint mit dem Gerät Standard-dialog-Thema. Die einzige Wahl, vor der Lutscher ist einer hellen oder dunklen Variante. Auf Lollipop funktioniert dies wie vorgesehen und beantragt.
EDIT: Seit appcompat-v7-r21.1.0 Sie können
AppCompatDialog
die material-Themen-Variante von nativeAlertDialog
.Können Sie verwenden, vorausgesetzt,
AlertDialog.Builder
(nicht zu verwechseln mit seinem nativen Pendant) für die Erzeugung Ihrer Instanzen.AlertDialog
ist hardwired inListPreference
so erwarte ich einige Probleme.DialogPreference
verwendetandroid.app.AlertDialog.Builder
direkt an, so wäre es unmöglich, wechseln Sie im angezeigten Dialogfenster auf das material design für alle API-Ebenen (die erfordert die Verwendung vonandroid.support.v7.widget.AlertDialog.Builder
).Glaube ich, dass die option nur für jetzt ist, zu erweitern und überschreiben-dialog Erstellung Logik in
DialogPreference
oder deren Unterklassen (und Reflexion zu arbeiten, um private Accessoren, wenn erforderlich). Überprüfen Sie heraus dieses reddit-thread und ein BeispielAppCompatListPreference
durch den Autor des Threads.Nehmen Sie Hinweise aus den bereits gegebenen Antworten habe ich gesetzt in die manifest-ein custom-theme für die Einstellungen der Aktivität, da es notwendig ist, den Rahmen zu entfernen hintergrund rund um das Dialogfeld, das angezeigt wird, verwenden Sie einen transparenten hintergrund dieses nur für API <21:
AndroidManifest.xml
values/style.xml
schließlich für Werte-v21/style.xml den normalen dialog, wenn Sie nicht setzen Sie dieses in v21-Dialoge transparent.
Eigentlich hab ich das problem um die Farben direkt aus dem Thema Attribute: ?android:colorAccent statt meine "Feste Farben" @color/accent_light.
Sollten Sie sich diese Gist darüber, wie verschiedene Komponenten verwenden, die die Farbe des Designs Attribute. Möglicherweise müssen Sie fügen Sie die folgenden Attribute, die Ihr Thema, um den Effekt zu bekommen, die Sie wollen:
EditTextPreference
,ListPreference
usw), nur der root -PreferenceScreen
.