Ich bin neu in der Android-Entwicklung und habe eine Frage zum Einstellen des Gewichts in einem linearen Layout.
Ich versuche, eine Zeile mit zwei benutzerdefinierten Schaltflächen und einem benutzerdefinierten Bearbeitungstext zu erstellen. Der Bearbeitungstext sollte nur so viel Platz wie der Inhalt beanspruchen, und die beiden Schaltflächen sollten horizontal erweitert werden, um den restlichen Platz in der Zeile auszufüllen. So was...
| [#Button++#] [#Button--#] [et] |
Nach einigen Versuchen ist dies das, was ich erreichen kann, obwohl es zu kompliziert erscheint.
| [Button] [Button] [###ET###] |
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal|center_vertical"
Android:layout_weight="1"
>
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center_horizontal|center_vertical"
>
<RelativeLayout
Android:id="@+id/btn_plus_container"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
>
<ImageButton
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:id="@+id/btn_plus"
Android:background="@drawable/btn"
Android:layout_centerInParent="true"
></ImageButton>
<TextView
Android:textColor="#FAFAF4"
Android:id="@+id/tv_dice_plus"
Android:text="@string/tv_plus"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
></TextView>
</RelativeLayout>
</LinearLayout>
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center_horizontal|center_vertical"
>
<RelativeLayout
Android:id="@+id/btn_minus_container"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
>
<ImageButton
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:id="@+id/btn_minus"
Android:background="@drawable/btn"
Android:layout_centerInParent="true"
></ImageButton>
<TextView
Android:textColor="#FAFAF4"
Android:id="@+id/btn_minus"
Android:text="@string/tv_minus"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
></TextView>
</RelativeLayout>
</LinearLayout>
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center_horizontal|center_vertical"
>
<EditText
Android:textColor="#FAFAF4"
Android:text="@string/et_output"
Android:id="@+id/et_output"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:inputType="number"
Android:selectAllOnFocus="true"
Android:minWidth="50sp"
Android:maxWidth="50sp"
Android:background="@drawable/tv_black_background3"
Android:textColorHighlight="#c30505"
></EditText>
</LinearLayout>
</LinearLayout>
Wenn ich die Einstellung von [Android: layout_weight = "2"] für die linearen Layouts verstehe, die die Tasten gedrückt halten, sollten sie mehr Platz beanspruchen als der Bearbeitungstext. Bei mir ist das Gegenteil der Fall.
| [Btn] [Btn] [#####et#####] |
Ich habe so viele verschiedene Kombinationen ausprobiert, an die ich mich nicht erinnern kann und keine hat funktioniert.
Es funktioniert nicht, weil Sie als Breite fill_parent verwenden. Die Gewichtung wird verwendet, um den verbleibenden leeren Platz zu verteilen. Oder take space, wenn die Gesamtsumme größer als das LinearLayout ist. Stellen Sie stattdessen die Breite auf 0dip und es wird funktionieren.
Android:Layout_weight
kann verwendet werden, wenn Sie nicht bereits einen festen Wert wie fill_parent
an Ihre Breite anfügen.
Tun Sie so etwas:
<Button>
Android:layout_width="0dp"
Android:layout_weight=1
-----other parameters
</Button>
Denken Sie so, wird einfacher sein
Wenn Sie 3 Schaltflächen haben und ihre Gewichte entsprechend 1,3,1 sind, funktioniert sie wie eine Tabelle in HTML
Geben Sie 5 Portionen für diese Zeile an: 1 Portion für Button 1, 3 Portion für Button 2 und 1 Portion für Button 1
Im linearen Layout setzen Sie die WeightSum = 2;
Und verteilen Sie das Gewicht auf seine Kinder, wie Sie möchten, dass sie angezeigt werden. Ich habe dem Kind Gewicht = "1" gegeben. So werden beide die Hälfte der Summe verteilen.
<LinearLayout
Android:id="@+id/linear1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:weightSum="2"
Android:orientation="horizontal" >
<ImageView
Android:id="@+id/ring_oss"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:src="@drawable/ring_oss" />
<ImageView
Android:id="@+id/maila_oss"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:src="@drawable/maila_oss" />
</LinearLayout>
gewichtswerte 0-1 teilen sich die Verteilung des verfügbaren Speicherplatzes (nach Einstellung von layout_width = "0px") proportional zum Gewichtswert. Ansichtselemente mit nicht angegebenem Gewicht (keine Gewichtseingabe) erhalten Gewicht 0, dh sie erhalten keine Erweiterung.
Eine einfache Alternative ohne erforderliche Gewichtseinträge besteht darin, Marquee mit Text An eine Ansicht anzuhängen, in der angegeben wird, dass das erforderliche Minimum für den Text (wrap_content) auf den verfügbaren Platz Android: layout_width = "wrap_content" Android: Ellipsize = "Marquee"
Ein Grund mehr, den ich gefunden habe (so vage es auch klingen mag). Das unten hat nicht funktioniert.
LinearLayout vertikal
LinearLayout Füllhöhe + Gewicht
LinearLayout Füllhöhe + Gewicht
LinearLayout Füllhöhe + Gewicht
EndLinearLayout
Was hat funktioniert?
RelativesLayout
LinearLayout vertikal
LinearLayout Füllhöhe + Gewicht
LinearLayout Füllhöhe + Gewicht
LinearLayout Füllhöhe + Gewicht
EndLinearLayout
EndRelativeLayout
Es klingt vage durch ein Grundlayout mit Linear und Gewichte darunter funktionierten nicht. Und wenn ich sage "funktionierte nicht", dann meine ich, dass die Konsistenz der Bildschirme nach dem grafischen Layout zwischen verschiedenen Auflösungen sehr groß war.
<LinearLayout
Android:id="@+id/linear1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:weightSum="9"
Android:orientation="horizontal" >
<ImageView
Android:id="@+id/ring_oss"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:src="@drawable/ring_oss" />
<ImageView
Android:id="@+id/maila_oss"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:src="@drawable/maila_oss" />
<EditText
Android:id="@+id/edittxt"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:src="@drawable/maila_oss" />
</LinearLayout>
ich würde annehmen, die Breite von EditText
s auf wrap_content
zu setzen und die beiden Knöpfe in eine LinearLayout
zu setzen, deren Breite fill_parent
ist und das Gewicht auf 1 gesetzt ist.