Jestem nowy w programowaniu na Androida i mam pytanie dotyczące ustawiania wagi w układzie liniowym.
Próbuję utworzyć wiersz z dwoma niestandardowymi przyciskami i niestandardowym tekstem edycji. Tekst do edycji powinien zajmować tyle miejsca, ile jego zawartość, a dwa przyciski powinny rozszerzyć się w poziomie, aby wypełnić resztę dostępnego miejsca w wierszu. Lubię to...
| [#Button++#] [#Button--#] [et] |
Po kilku próbach jest to najbliższe mi osiągnięcie tego, czego chcę, nawet jeśli wydaje się to zbyt skomplikowane.
| [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>
Jak rozumiem, ustawienie [android: layout_weight = "2"] dla układów liniowych przytrzymujących przyciski powinno sprawić, że zajmą więcej miejsca niż tekst edycji, ale dla mnie robi to odwrotnie, dzięki czemu oba są o połowę mniejsze.
| [Btn] [Btn] [#####et#####] |
Próbowałem tak wielu różnych kombinacji, że nawet ich nie pamiętam i żadna nie zadziałała.
android:Layout_weight
może być używany, gdy nie dołączasz już stałej wartości do swojej szerokości, jakfill_parent
itp.Zrób coś takiego:
<Button> Android:layout_width="0dp" Android:layout_weight=1 -----other parameters </Button>
źródło
Pomyśl w ten sposób, będzie prostsze
Jeśli masz 3 przyciski i ich waga wynosi odpowiednio 1,3,1, będzie działać jak tabela w HTML
Zapewnij 5 porcji dla tej linii: 1 porcja na przycisk 1, 3 porcje na przycisk 2 i 1 porcja na przycisk 1
źródło
W linearLayout ustaw WeightSum = 2;
I rozłóż ciężar na jego dzieci, tak jak chcesz, aby je wyświetlały. Dałem dziecku wagę = "1". Tak więc oboje rozdzielą połowę całości.
<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>
źródło
wartości wagi 0-1 dzielą rozkład dostępnej przestrzeni (po ustawieniu layout_width = "0px") proporcjonalnie do wartości wagi. Widok elementów o nieokreślonej wadze (bez wpisu wagi) uzyskuje wagę 0, co oznacza, że nie rozwijają się.
Prostą alternatywą, która nie wymaga wpisów wagi, jest dołączenie markizy do widoku z tekstem, który mówi mu, aby rozszerzał się od minimum wymaganego dla tekstu (wrap_content) do dostępnego miejsca EditText: android: layout_width = "wrap_content" android: ellipsize = "marquee"
źródło
przypuszczam, że ustawiam
EditText
szerokość s nawrap_content
i umieszczam dwa przyciski w a,LinearLayout
którego szerokośćfill_parent
i waga są ustawione na 1.źródło
Znalazłem jeszcze jeden powód (choć może się to wydawać niejasne). Poniższe nie działa.
Co zadziałało
Brzmi niejasno przez układ główny z Linear i wagi pod nim nie działały. A kiedy mówię „nie zadziałało” mam na myśli to, że po obejrzeniu układu graficznego pomiędzy różnymi rozdzielczościami, spójność ekranu bardzo się zepsuła.
źródło
<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>
źródło