Festlegen der Menüleiste für Android-Hintergrund und -Persistenz - Die Verwendung von Attributen in älteren Versionen führt zum Absturz. - Gibt es einen Themen- / Musteransatz?

74

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 -v11Ressourcensatz 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:backgroundsie auf den Alias ​​verweisen können und der Alias ​​die -v11Differenzierung <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!

CommonsWare
quelle
Kann <include /> hier nicht arbeiten? Oder vielleicht verschiedene Versionen eines Themas?
Alexanderblom
@alexanderblom: <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. :-)
CommonsWare
Ja, auf den ersten Blick trennten sich die Themen von -v11 oder scheinen nicht der richtige Weg zu sein. Weniger kopieren / einfügen als mindestens ein ganzes Layout: /
Nathan Schwermann
Und wie wäre es @android:color/transparent?
Roman Nurik
@ Roman Nurik: Ich gehe davon aus, dass du das im Gegensatz zu meinst @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.
CommonsWare

Antworten:

57

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.

Al Sutton
quelle
9
Das scheint zu funktionieren. Natürlich muss ich jetzt genug über Stile und dergleichen lernen, um ein Kapitel darüber zu schreiben, damit ich besser erklären kann, wie man diesen Ansatz in dem Buch verwendet. Darauf freue ich mich also nicht. :-( Vielen Dank für die Hilfe!
CommonsWare
25
Froh, dass ich Helfen kann. Ihre Bücher haben mich aus genügend Wissenslücken gegraben. Ich bin froh, etwas zurückgeben zu können.
Al Sutton