Android: So skalieren Sie ein Layout mit der Bildschirmgröße

Betrachten Sie dieses Layout (gezogen vonHier):

Ich möchte die Prinzipien verstehen, die dahinter stehen, wenn dieses Layout mit der Bildschirmgröße skaliert wird. Für das Quadrat funktioniert eine benutzerdefinierte onMeasure-Funktion wie folgt:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}

Die Breite und Höhe der benutzerdefinierten Togglebuttons und Imagebuttons unten sollte skaliert werden, um den Rest des Bildschirms abzüglich layout_margins auszufüllen, und der Text und die Bilder darin sollten skaliert werden, um die Schaltflächen abzüglich Auffüllung auszufüllen. Der äußere Rand sollte auch skalieren.

Mein erster Gedanke war, ein relatives Layout zum Positionieren der Schaltflächen und layout_margin / padding-Attribute zum Erstellen von Rändern zu verwenden. Relative Layouts und layout_margin / padding erfordern jedoch feste Pixelwerte, sodass sie nicht skalierbar sind.

Ich dachte dann daran, verschachtelte lineare Layouts mit layout_weights zum Positionieren der Schaltflächen und Platzhalteransichten zum Erstellen von Rändern zu verwenden. Obwohl diese Techniken skalierbar sind, funktionieren sie nicht mit Schaltflächen, da für Schaltflächen viele Attribute (Textgröße, Bildgröße, Eckenradius usw.) feste Pixelwerte erforderlich sind. Diese Einschränkung bedeutet zum Beispiel, dass die folgende XML:

<ToggleButton 
    android:layout_weight="1"
    style="@style/myButton"
    [...] />
<View 
    android:layout_weight="1"/>
<ImageButton 
    android:layout_weight="1"
    style="@style/myButton"
    [...] />

Die beiden Schaltflächen und der Abstand zwischen ihnen werden nicht unbedingt die gleiche Breite haben. Es hängt alles von der Textgröße, der Bildgröße usw. usw. der Schaltflächen ab.

Ich habe einen Blick darauf geworfendiese Frage Ich bin jedoch der Meinung, dass es eine einfachere Lösung für ein so einfaches Problem geben sollte, bei der nicht zu viel Nicht-XML verwendet werden muss.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage