Android Single-Layout-passend für Alle Bildschirmgrößen

Ich bin eine Aktualisierung meiner Android-app und erkannte, dass ich erstellt habe, ein layout für jede mögliche Bildschirmgröße (layout-kleine layout-große, etc...) Es wäre ein großer Schmerz durch zu gehen, jede XML-Datei manuell eine kleine änderung. Ich bin versucht, erstellen Sie eine einzelne XML-Datei unterstützt alle Bildschirm-Größen. Nach der überprüfung der Android-Dokumentation und anderen Fragen auf stackoverflow, es scheint LinearLayout ist die beste Wahl, wie Sie eine weightSum und layout_weight für jedes Element im layout. Dies ist nicht wie erwartet funktioniert (siehe code unten und Bilder). Mache ich das richtig? Muss ich zurück zu gehen, um die Schaffung einer RelativeLayout für jede mögliche Bildschirmgröße?

Meine Bilder sind eine einzige drawable-Ordner und meine layouts in einem einzigen layout-Ordner.

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    android:gravity="center"
    android:orientation="vertical"
    android:weightSum="100" >

    <ImageButton
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/image0"
        android:background="@null"
        android:layout_weight="30" />

    <ImageButton
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"  
        android:scaleType="fitCenter"
        android:src="@drawable/image1"
        android:background="@null"
        android:layout_weight="30" />

    <ImageButton
        android:id="@+id/key"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="30"
        android:background="@null"
        android:src="@drawable/image0_key" />

    <TextView
        android:id="@+id/tvScore"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="Score: 0"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_weight="10"
        android:layout_gravity="left" />

</LinearLayout>

Resultierende Ansicht (überlauf der Elemente und layout nicht konsistent sind für Bildschirm-Größen)

Nexus One:

Android Single-Layout-passend für Alle Bildschirmgrößen

Tablet:

Android Single-Layout-passend für Alle Bildschirmgrößen

BEARBEITEN:
Ich habe die folgenden drawable-____ Ordner. Es produziert das gleiche Ergebnis.

Android Single-Layout-passend für Alle Bildschirmgrößen

Die layout_height jedes der Kinder sollte 0dp, weil die Höhe wird berechnet basierend auf der verfügbaren Platz und verteilt je nach Gewicht. Ihre textview hat eine match_parent als gut, das wird zwingen den tv zu besetzen, um so viel Platz wie die Eltern (der linearen layout, das für alle auf dem Bildschirm)
Nach dem ändern der layout_height jedes Kind 0dp, ändert sich nichts. Sieht genau so aus wie obige Bilder.
Sie müssen verstehen, wie Gewicht zu Werke. Layout Gewicht verteilt wird, NACHDEM das layout gemessen wird (in einem zweiten Durchgang), so dass Sie haben, um Bilder, die die gleiche Dichte, die in jedes display Dichte, sonst gibt ' s nichts zu tun. Das system nutzt den FREIEN Speicherplatz, nachdem die Bilder gelegt worden.
Ok, also du sagst ich brauche Bilder für jede Dichte? (hdpi, mdpi, ldpi, xhdpi)
Ja, sonst werden die Bilder immer die gleiche Größe, und das einzige, was sich ändert, ist die "verbleibenden" Raum, nachdem alle Bilder platziert wurden.

InformationsquelleAutor Shane | 2013-10-31

Schreibe einen Kommentar