Wie programmiere ich programmatisch, welches Layout (Layout-Normal, Layout-groß etc.) meine App gerade verwendet? Ich sehe den getWindowManager (). GetDefaultDisplay (). GetMetrics (Metriken) Aufruf, aber es scheint nur mit der Bildschirmdichte zu tun, aber nicht notwendig, welches Layout die App verwendet. Ich brauche die Info, da ich einige der Positionierung von Ansichten zur Laufzeit dynamisch ändern muss.
Vielen Dank im Voraus.
Ich hatte das gleiche Problem. Wenn Sie layout
/ layout-sw600dp
/ layout-sw720dp
verwenden, funktioniert das Folgende für mich:
Der folgende Code wird Ihnen helfen. Ich habe gerade die entsprechende Bildschirmgröße oder Dichtekategorie gedruckt. Du kannst machen was du willst!
%Vor%Ich war auf der Suche nach dem gleichen Ding! Ich habe 2 ähnliche Fragen / Antworten gefunden:
Verwenden von ScreenLayout Bitmask
Obwohl alle drei Fragen im Wesentlichen gleich sind, benötigen Sie beide Antworten, um Ihr Ergebnis zu erhalten.
Ich habe diesen Code verwendet, um die Layoutgröße in meiner Aktivität zu erhalten:
%Vor% Die erste Zeile gibt die Layoutgröße zurück, aber es ist eine Zahl, die fast die maximale Größe von int
ist.
Die zweite Zeile wird UND die Layoutgröße mit der gegebenen Maske. Die Maske hat einen Wert von 15 in Dezimal oder F in Hex.
Der zurückgegebene Wert liegt zwischen 0 und 3. Die den Bildschirmgrößen entsprechenden Werte sowie der Wert der Größenmaske sind als Konstanten in der Klasse android.content.res.Configuration
definiert: Dokumentation zur Android-Konfiguration .
Alles, was Sie nach den letzten zwei Zeilen tun müssen, ist eine switch -Anweisung, die die zurückgegebenen layoutSize
mit den vordefinierten Werten von Configuration
für SCREENLAYOUT_SIZE_XXX
vergleicht.
Hoffentlich ist es nicht zu spät, es zu benutzen. Mein Problem war, dass ich nicht wusste, wie man die Frage in der genauen Android-Sprache stellt. Das ist wahrscheinlich der Grund, warum die gleiche Frage so oft gestellt wurde und wahrscheinlich auch gestellt werden sollte.
Warum können Sie nicht die Position der Ansichten in der XML-Datei angeben? Wenn also dieser spezifische Layout-Typ aufgerufen wird, müssen Sie nichts programmatisch machen?
Sie können die verschiedenen Ordnertypen verwenden, z. B. layout
, layout-sw600dp
, layout-sw720dp
usw.
Siehe Ссылка für verschiedene Konfigurationen
Das ist eine alte Frage, aber ich würde gerne meinen Weg zur Lösung dieses Problems teilen.
Erstellen Sie eine values - * -Variante, die mit jedem Setup übereinstimmt, das Sie programmtechnisch bestätigen möchten. Darin definieren Sie die richtigen Werte, die die aktuelle Konfiguration beschreiben:
Wie Sie sehen können, existiert der boolesche Wert islandscape sowohl in Werten als auch values-land , daher ist es möglich, sicher darauf zuzugreifen über R.bool.is_landscape .
Der einzige Unterschied ist jedoch der Wert:
getResources().getBoolean(R.bool.is_landscape);
wird im Landscape-Modus als true
und andernfalls als false
ausgewertet.
Hinweis : Natürlich ist es möglich, getResources().getConfiguration().orientation
zu verwenden, um die aktuelle Geräteausrichtung zu erhalten, obwohl ich diesen einfachen, vertrauten Fall gewählt habe, um mein Beispiel klar und deutlich zu machen.
Es ist wichtig zu verstehen, dass diese Technik vielseitig ist und man ein Ressourcenverzeichnis mit komplexeren Werten definieren kann (zB values-ldrtl-sw600dp-v23 ), um eine spezifischere Konfiguration zu unterstützen.
Tags und Links android android-layout