In Android 3.0 kann das Konzept "aktiviert" mit einem "aktivierten" Hintergrund gerendert werden. Auf diese Weise erhalten Sie die dauerhafte Leiste, die angezeigt wird, wenn Sie auf ein Listenfragment tippen, und geben den Kontext für das Fragment rechts in der Liste an (z. B. wird durch Tippen auf einen Ordner in Google Mail dieser Ordner hervorgehoben und ein weiteres Listenfragment geöffnet, um die Konversationen in diesem Ordner anzuzeigen ).
Zum Beispiel zeigen die Fragmentbeispiele Dinge wie:
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES));
Diese Ressource ( android.R.layout.simple_list_item_activated_1
) ist neu in Android 3.0. Was macht es "aktiviert" ist:
android:background="?android:attr/activatedBackgroundIndicator"
Dieser Attributwert ist neu in Android 3.0 und führt zum Absturz, wenn Sie versuchen, ihn in früheren Android-Versionen zu verwenden, soweit ich das beurteilen kann. Ich möchte den Hintergrund auf diesen magischen Wert für die Kombination 3.0 / groß / Landschaft einstellen und ihn ansonsten überspringen.
Ich kann dies erreichen, indem ich zwei separate Versionen des Layouts habe, eine in einem -v11
Ressourcensatz und eine in einem regulären Ressourcensatz. Dies ist jedoch etwas weniger trocken als ich es gerne hätte, da der Großteil des Layouts derselbe ist und nur dieses eine Attribut entweder enthalten ist oder übersprungen wird.
Ich habe versucht, zeichnbare Ressourcen-Aliase zu verwenden, damit android:background
sie auf den Alias verweisen können und der Alias die -v11
Differenzierung <bitmap>
übernimmt , aber Drawables scheinen das nicht zu mögen android:src="@null"
.
Ich vermute, dass es einen Stil- und Themenansatz für dieses Problem gibt, aber da ich mich nie vollständig mit diesen befasst habe (eine meiner peinlicheren Wissenslücken bei Android), bin ich mir nicht ganz sicher, was ich tun soll.
Hat jemand ein Muster für die Verwendung von "aktiviert" in 3.0 und das Überspringen in "vor 3.0" über separate Layouts hinaus ausgearbeitet?
Vielen Dank!
quelle
<include>
würde hier nicht helfen - ich brauche den Hintergrund auf dem Stammelement des Zeilenlayouts . "verschiedene Versionen eines Themas" ist sicherlich im Bereich der Möglichkeiten, aber deshalb stelle ich die Frage. :-)@android:color/transparent
?@null
? Das könnte funktionieren. Abgesehen von der Manschette würde ich denken, dass der Stilansatz Al-Konturen in Bezug auf die Wiedergabetreue mit der Android-Vision "richtiger" wäre - stimmen Sie zu? Letztendlich geht es bei dieser Frage weniger um mich als vielmehr darum, was ich meinen Lesern sage. Deshalb möchte ich den Weg gehen, den Google von Android-Entwicklern verwenden lassen möchte.Antworten:
Styles sind dein Freund ....
Haben Sie zwei Werteverzeichnisse, eines ist Werte-v11, das andere die Standardwerte.
Jedes Werteverzeichnis enthält eine styles.xml, mit dem Unterschied, dass die Standardwerte enthalten sind.
<style name="listViewActivatedStyle"/>
Die Werte-v11 enthalten;
<style name="listViewActivatedStyle"> <item name="android:background">?android:attr/activatedBackgroundIndicator</item> </style>
Dann können Sie ein einzelnes Layout haben, das verwendet;
style="@style/listViewActivatedStyle"
und die entsprechende wird ausgewählt.
quelle