Android Emulator meldet 600x1024 MDPI als XLarge?

8

Ich versuche derzeit eine bestehende Anwendung auf Kompatibilität mit dem bald erscheinenden Amazon Kindle Fire Tablet zu testen. Sie sagen, den Emulator bei 600x1024 und LCD-Dichte auf 169 (obwohl in der E-Mail) zu setzen Sie sagten 160 statt 169) und dass es sich als "groß" und nicht "xlarge" ausweisen sollte (das habe ich von einem hin und her E-Mail-Austausch mit ihrem Support-Team, wo ich mich beschwere, dass es nicht funktioniert) / p>

Google scheint dies in ihrem Abschnitt zum Testen für mehrere Bildschirmgrößen zu unterstützen, wenn sie diese Auflösung und MDPI als "groß" auflisten ( Ссылка ). Wenn ich jedoch einen "layout-xlarge" -Ordner mit dem "layout-large" einfüge, lädt der Emulator immer "xlarge". Wenn ich die LCD-Dichte auf etwa 240 ändere, lädt es "groß" statt "xlarge", aber das soll nicht korrekt sein und ich befürchte, dass es auf dem endgültigen Gerät nicht funktioniert. Um dies zu testen, nahm ich das API-10-Beispiel von "Multi-Res" und erstellte eine Reihe von Layout-Ordnern wie oben beschrieben und jedes Mal wenn "xlarge" geladen wurde, wenn es dort war und "large" wenn es kein " xlarge ".

Also, meine Frage ist, ob ich die Dokumentation richtig lese oder ob mein Emulator irgendwie durcheinander ist, da die Leute bei Amazon darauf bestehen, dass er als "groß" berichtet, was, wenn das wahr wäre, niemals laden würde. " xlarge "richtig?

Hier ist, was ich im Manifest in dem Beispiel Multi-Res habe, das ich modifiziert habe, um das zu testen:

%Vor%     
Josh 25.10.2011, 21:10
quelle

1 Antwort

6

Dies scheint ein Fehler in der Dokumentation zu sein. Wenn wir uns den tatsächlichen Code anschauen, der zur Berechnung der Bildschirmgröße verwendet wird, können wir sehen, dass ein 600x1024 Bildschirm bei 160 dpi tatsächlich als xlarge betrachtet wird.

Nehmen Sie mein Wort dafür nicht. Die Implementierung befindet sich in WindowManagerService.computeNewConfigurationLocked () ( Warnung für langsames JavaScript). Die interessanten Bits sind wie folgt. Die Bildschirmgröße in Pixel wird basierend auf der Dichte skaliert:

%Vor%

Für einen Bildschirm mit mdpi (160 dpi) ist dm.density 1,0. Für hdpi (240 dpi) wird es 1,5 sein. In unserem Fall haben wir einen mdpi Bildschirm. Also, nachdem dieser Code ausgeführt wurde, longSize == 1024 und shortSize == 600 . Kurz darauf erreichen wir diesen Code:

%Vor%

was mit unseren Werten longSize und shortSize bedeutet, dass mScreenLayout Configuration.SCREENLAYOUT_SIZE_XLARGE zugewiesen wird, mit anderen Worten, dass der Bildschirm als 'xlarge' betrachtet wird. Es ist interessant zu bemerken, dass wenn der Bildschirm auf der kurzen Seite ein Pixel kleiner wäre, er nur als "groß" betrachtet würde.

Sie lesen also die Dokumentation richtig, aber soweit ich das sehen kann, ist die Dokumentation falsch und Ihr Emulator ist in Ordnung.

    
Martin Nordholts 15.11.2011, 15:13
quelle