Wie kann ich eine benutzerdefinierte Ansicht mit einer relativen Größe erstellen?
-
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?
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_width
s und layout_weight
s 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).