wake-up-neo.com

Android-Layoutgewicht

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.

84
UnluckyDevil

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.

212
Romain Guy

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>
14
learn_andrd

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

7
George Nguyen

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>
3
Xar E Ahmer

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"

2
JDPearlman

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.

0
Siddharth
<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>
0
Devendra Shah

ich würde annehmen, die Breite von EditTexts 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. 

0
Jonathan Roth