Controlling-Sicht aus einer Ressourcen -
Ich habe ein layout mit zwei ImageViews. Ich möchte eine Anzeige im hochformat und andere im Querformat. Wie kann ich es erreichen, Ressourcen nutzen? (Ich weiß, wie Sie programmgesteuert, sondern spezielle, die ich brauche, um es zu erreichen, mithilfe der Ressourcen).
Habe ich versucht, etwas wie
in res/layout/may_layout.xml:
...
<ImageView
android:id="@+id/image1"
android:visibility="@integer/visible_in_portrait" <<-- is this allowed?
...
/>
<ImageView
android:id="@+id/image2"
android:visibility="@integer/visible_in_landscape"
...
/>
in res/values/integers.xml:
...
<!-- NOTE: 0 and 8 are VISIBLE and GONE respectively -->
<integer name="visibile_in_portrait">0</integer>
<integer name="visibile_in_landscape">8</integer>
in res/values-land/integers.xml:
...
<integer name="visibile_in_portrait">8</integer>
<integer name="visibile_in_landscape">0</integer>
Aber bekomme ich einen Laufzeit-Fehler (index out of bound), wenn Sie versuchen, sich zu füllen die Bilder. Wenn ich entfernen Sie das android:visibility-Anweisungen, das Programm läuft aber ich sehe beide Bilder.
Q: Was ist der Weg, um eine Ressource als Wert für das android:visibility-Attribut?
(wenn Sie sich Wundern, warum die Einstellung programmgesteuert wird mir nicht helfen, es hat zu tun mit der automatischen Landschaft/hochformat wechseln von app-widgets mit uri Datei, bitmaps).
Du musst angemeldet sein, um einen Kommentar abzugeben.
wird es möglich sein, wenn Sie diesen trick verwenden, fügen Sie Ihre Sichtbarkeit-Linie Stil und setzen Sie zwei Instanzen der Datei in -land-und normal-Modus.
Ich meine in der Datei
styles.xml
im Ordnervalues
eine Art mit dem Namens1
, und setzenandroid:visibility=visible
in diesem, und instyles.xml
im Ordnervalues-land
eine Art mit dem Namens1
, und setzenandroid:visibility=gone
.auch, in der Datei
styles.xml
im Ordnervalues
eine Art mit dem Namens2
, und setzenandroid:visibility=gone
in diesem, und instyles.xml
im Ordnervalues-land
eine Art mit dem Namens2
, und setzenandroid:visibility=visible
.und legen Sie dann
s1
zur ersten Bildansicht unds2
zur zweiten.Lösung gegeben durch Liebe Calvin ist auch richtig, aber wenn Sie ein Komplexes layout, die möglicherweise im Laufe der Zeit ändern, mit einer layout-Datei wäre besser, und weniger ändern müssen.
Dies ist eine alte Frage, die schon akzeptiert, aber die folgende Lösung die vielleicht jemand anderes helfen:
Wenn Sie überprüfen res/values/attrs.xml im Android source-code, sehen Sie die definition von visibility-Eigenschaft wie folgt:
Dieses Attribut erwartet einen string-Wert (sichtbar, unsichtbar, verschwunden) konvertiert werden zu (0, 1, 2) beziehungsweise. So können Sie deklarieren integer-Ressourcen, die mit diesen Werten so:
values/integers.xml
values-land/integers.xml
Jedoch, wenn Sie wollen, es noch besser zu machen, um zu verhindern, raten, dass diese numerischen Konstanten, die jedes mal, Sie könnte wie dieser:
values/integers.xml
values-land/integers.xml
Können Sie diesen Ansatz verwenden oder die vorgeschlagene von Keyhan. Wählen Sie die eins, die Ihnen besser passt.
<integer>
eher als<string>
View
Klasse code, diese Werte (0, 1 und 2) verwendet werden, um auf die Positionen von diesem Mitglied:private static final int[] VISIBILITY_FLAGS = {VISIBLE, INVISIBLE, GONE};
. Das ist, warum Sie nicht verwenden können, 0, 4 und 8, da 0, 1 und 2 stehen für SICHTBAR und UNSICHTBAR VERSCHWUNDEN Indizes.view_visible
). Es funktioniert nur, wenn ich aufgebe, 0, 1, 2 auf eine integer-Ressource, die ich direkt verwenden. (aber +1 für das bit!!)android.view.View#VISIBLE``android.view.View#INVISIBLE
undandroid.view.View#GONE
Werte der Variablen werden sollte<enum name="visible" value="0" /> <enum name="invisible" value="4" /> <enum name="gone" value="8" />
Ist es nicht möglich. (Ich habe versucht, zu definieren, fill_parent als string und verwenden Sie es für die layout_width und zu schlägt.)
Warum nutzen Sie nicht 2 layouts?
Denen jeder definieren, die korrekte Bildansicht zu zeigen.
Zusätzlich, dass die Werte-land können Sie verursachen Probleme, wenn Sie Bedürfnisse zur Unterstützung von multi-Sprachen. (Sie müssen Wert-xx-land für jede Sprache)