Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Layout Weight

Tags:

android

layout

I am new to Android development and I have a question about setting weight in a linear layout.

I am trying to create a row with two custom buttons and a custom edit text. The edit text should only take up as much room as its content, and the two buttons should expand horizontally to fill the rest of the available space in the row. Like this...

| [#Button++#] [#Button--#] [et] | 

After several attempts this is the closest I can get to what I want, even though it seems overly complicated.

| [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> 

As I understand setting [android:layout_weight="2"] for the linear layouts holding the buttons should make them take up more room than the edit text, but it does the opposite for me, making them both half the size.

| [Btn] [Btn] [#####et#####] | 

I have tried so many different combinations I can't even remember them, and none have worked.

like image 665
UnluckyDevil Avatar asked Feb 13 '11 21:02

UnluckyDevil


People also ask

How do you do weight in relative layout?

RelativeLayouts do not support weight. You need to use a LinearLayout as a parent container if you want to use weights.

What is weight in XML?

The Layout Attribute weight specify the size of Child views in a container. For example, if we want to place two buttons horizontally by occupying each half of the screen width, we can define layout weight as 0.5 for each button inside the Layout.

What is android layout width?

android:layout_widthSpecifies the basic width of the view. This is a required attribute for any view inside of a containing layout manager.


1 Answers

It doesn't work because you are using fill_parent as the width. The weight is used to distribute the remaining empty space or take away space when the total sum is larger than the LinearLayout. Set your widths to 0dip instead and it will work.

like image 149
Romain Guy Avatar answered Sep 28 '22 06:09

Romain Guy