Wie programmiere ich programmatisch, welches XML-Layout meine Android-Apps verwenden?

7

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.

    
Kenny 21.05.2012, 16:49
quelle

7 Antworten

31

Eine sehr einfache Möglichkeit besteht darin, eine ID und ein Tag auf das übergeordnete Layout zu setzen und in onCreate() können Sie findViewById() und getTag() .

%Vor%

Und dann, in Ihrer onCreate Methode,

%Vor%     
ssttevee 08.02.2013 03:30
quelle
18

Ich hatte das gleiche Problem. Wenn Sie layout / layout-sw600dp / layout-sw720dp verwenden, funktioniert das Folgende für mich:

%Vor%     
Andrew Coonce 17.12.2013 20:11
quelle
3

Der folgende Code wird Ihnen helfen. Ich habe gerade die entsprechende Bildschirmgröße oder Dichtekategorie gedruckt. Du kannst machen was du willst!

%Vor%     
sagarpatidar 30.01.2014 04:44
quelle
2

Ich war auf der Suche nach dem gleichen Ding! Ich habe 2 ähnliche Fragen / Antworten gefunden:

ScreenLayout abrufen

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.

    
Jon 26.07.2012 14:41
quelle
0
%Vor%

Die ID sagt Ihnen, welches Layout Sie verwenden (vorausgesetzt, Sie setzen das ID-Tag im XML-Format).

    
Yusuf X 21.05.2012 16:55
quelle
0

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

    
tyczj 21.05.2012 16:52
quelle
0

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.

    
Rany Albeg Wein 04.10.2017 00:02
quelle

Tags und Links