Wie kann ich eine benutzerdefinierte Ansicht mit einer relativen Größe erstellen?

StackOverflow https://stackoverflow.com/questions/4316019

  •  29-09-2019
  •  | 
  •  

Frage

Ich möchte eine Anwendung entwickeln, die mit Geräten jeder Bildschirmauflösung arbeiten könnten.

Meine Idee zu tun, so war eine benutzerdefinierte Ansicht für jede Art von View I Gebrauch zu erstellen, und verwenden Sie die layout_width und layout_height im XML als Prozentsatz der Stammgröße angegeben (zum Beispiel ist layout_width="100dp" zu fill_parent äquivalent, und layout_width="50dp" bedeutet die Breite des View wird, um die Hälfte der Eltern eins).

Hier ist der Brauch TextView Klasse I aus:

public class RSTextView extends TextView {

    public RSTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int w, int h) {
        int parentWidth = ((View)this.getParent()).getWidth();
        int parentHeight = ((View)this.getParent()).getHeight();
        Log.i(null, "Width: " + w + "; Height: " + parentHeight);
        this.setMeasuredDimension(parentWidth * MeasureSpec.getSize(w) / 100,
                parentHeight * MeasureSpec.getSize(h) / 100);
    }
}

Allerdings funktioniert es nicht. Die parentWidth und parentHeight Größe ist immer 0.

Gibt es eine bessere Möglichkeit, eine Anwendung mit einer relativen Größe zu erstellen?

Und wenn es ist der richtige Weg zu gehen, wie kann ich die View Eltern Größe aus der onMeasure Methode abrufen?

War es hilfreich?

Lösung

Da Sie eine Ansicht, die Höhe während der Layout-Phase sind die Überprüfung, möchten Sie wahrscheinlich ein href werden mit <= "http://developer.android.com/reference/android/view/View.html#getMeasuredHeight%28 % 29" rel = ‚nofollow‘> getMeasuredHeight , nicht getHeight, aber ich bin nicht sicher, müssen Sie das, was Sie tun, zu tun. Es ist schwer, aus Ihrer Beschreibung zu sagen, aber es scheint, wie Sie das Verhalten von LinearLayout Gewichte. Zum Beispiel, wenn Sie eine horizontale LinearLayout mit 3 Kindern haben, können Sie die ersten nehmen Hälfte seiner Breite und die anderen jeweils nehmen um 25% durch die Zuordnung ihnen 0px layout_widths und layout_weights von 2, 1 bzw. 1 leicht eingestellt (oder alle anderen Gewichte dieser Anteile).

Wenn Sie die benutzerdefinierte View Weg zu gehen entscheiden, aber nicht überlasten, was layout_height und layout_width tun - Verwendung benutzerdefinierte XML-Attribute das Argument für die Prozentsätze zu übernehmen (I in LinearLayout den Code graben würde, um zu sehen, wie layout_weight umgesetzt wird).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top