Meine Anforderungen
Hinweis: Ich muss Android API 15 und höher unterstützen.
In meinem PreferenceFragment füge ich PreferenceScreens dynamisch einer PreferenceCategory hinzu.
%Vor%Wenn die Einstellungen Activity die Darstellung dieser PreferenceScreens mit nur einem Titel in der Zeile wiedergeben, sehen Sie das Bild unten.
Ich möchte anpassen, was in dieser Zeile angezeigt wird. Idealerweise hätte ich gerne einen Titel mit einer Zusammenfassung unten, ein Symbol links neben dem Titel / Zusammenfassung und in bestimmten Zeilen ein Symbol auf der rechten Seite. Siehe das Modellbild unten.
PreferenceScreen.setWidgetLayoutResource (int widgetLayoutResId)
Ich weiß, dass ich "setWidgetLayoutResource" verwenden kann, um ein Symbol rechts neben dem Zeilenlayout (und eine Zusammenfassung mit "setSummary") hinzuzufügen, indem ich den folgenden Code in meiner Einstellungsaktivität verwende
%Vor%wo "as_widget.xml" ist
%Vor%Dies wird UI wie folgt erzeugen
Das bringt mich näher an das, was ich möchte, aber immer noch nicht genau das, was ich möchte (das Symbol am Anfang der Zeile fehlt).
PreferenceScreen.setLayoutResource (int layoutResId)
Ich glaube, wenn ich das benutze, kann ich die Wiedergabe der ganzen Zeile steuern. Ich habe Beispiele auf Stackoverflow gesehen, wie
Nach meinem Verständnis muss die Layoutdatei, die Sie angeben, folgendes haben:
Wenn ich dies jedoch versuche, hebt Android Studio "@ + android: id / summary" mit dem Fehler "Symbol kann nicht aufgelöst werden" @ + android: id / summary hervor. Wenn die Anwendung ausgeführt wird, werden meine Zeilen vollständig gerendert leer.
Mein Java ist
%Vor%Und mein Layout ist
%Vor%Erweitern des Präferenzbildschirms
Ich habe den erweiterten PreferenceScreen betrachtet, um zu überschreiben, wie er gerendert wird, aber es scheint, dass diese Klasse jetzt endgültig gemacht wurde, also können alle Beispiele im Internet, die es so machen, nicht verwendet werden.
Ich habe es geschafft, dass das funktioniert.
Die Klasse Preference
verwendet com.android.internal.R.layout.preference
als Layout. Dies enthält eine ImageView für ein Symbol auf der linken Seite, dann die Titel- und Zusammenfassungstextansichten und schließlich ein widget_frame
Layout auf der rechten Seite.
Indem Sie " PreferenceScreen.setIcon(..)
" aufrufen, können Sie festlegen, dass das Zeichen in der Symbolbildansicht platziert werden soll. Wenn Sie PreferenceScreen.setWidgetLayoutResource("...")
aufrufen, können Sie festlegen, dass das Layout im widget_frame
-Layout platziert wird. In meinem Fall lege ich ein ImageView-Layout mit meinem Bild an.
Hier ist mein Java-Code.
%Vor%Dies erzeugt ein Layout wie das Folgende
Das Problem mit diesem Layout besteht darin, dass die Symbole nicht mit dem Text der Einstellungen darunter ausgerichtet sind, die keine Symbole haben.
Dies kann durch Angabe des Layouts für PreferenceScreen
ebenfalls gelöst werden. Ich habe Androids preference.xml
in mein Projekt kopiert (indem ich es für meinen Anwendungsfall umbenannt habe) und ich habe ImageView so geändert, dass es einen linken Abstand und einen Rand von 0dp hat.
Von
%Vor%bis
%Vor% Ich habe dann meine Kopie von preference.xml
für das Layout des PreferenceScreen angegeben. Also mein Java ist jetzt
Ich glaube, der Grund, warum mein ursprünglicher Versuch, PreferenceScreen.setLayoutResource
zu verwenden, nicht funktionierte, lag daran, dass das von mir angegebene Layout falsch war. Das falsche Layout hatte das ganze Layout mit der ID @android:id/widget_frame
, d. H.
Das richtige Layout benötigt keine ID für das Hauptlayout, sondern muss untergeordnete Ansichten mit den IDs @+android:id/icon
, @+android:id/title
, @+android:id/summary
, @+android:id/widget_frame
, dh
Sie können das Layout einer Voreinstellung auch anpassen, indem Sie Preference.onCreateView(parent)
überschreiben. Das folgende Beispiel verwendet eine anonyme innere Klasse, um rote Voreinstellungen vorzunehmen.
Tags und Links android layout preferencescreen preference customizing