49

Ok, i have two buttons in linear layout:

<LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:layout_width="fill_parent"> <Button android:id="@+id/aktiviraj_paket" android:text="Aktiviraj" android:layout_height="40sp" android:layout_width="160sp" android:background="@drawable/my_border3" android:onClick="myClickHandle"></Button> <Button android:id="@+id/deaktiviraj_paket" android:text="Deaktiviraj" android:layout_height="40sp" android:layout_width="fill_parent" android:background="@drawable/my_border3" android:onClick="myClickHandle"> </Button> </LinearLayout> 

So the thing is, if I use fill parent on both buttons, they are one on each other, so i have made first button 160sp width, and second is fill_parent. If this is shown on 4 inch screen or smaller, buttons are the same size, but if i try this on tablet (10 inch) first button stays 160sp wide, and second is stretched till the end of screen (because fill_parent). Can i make this, so both buttons could be even size in no matter what size is the screen ??

10 Answers 10

104

Use android:layout_weight="1" on both Buttons. Set android:layout_width="0dp" on both. Since both buttons now have equal weighting, they will now each have half the parent's width.

You can find out more here: http://developer.android.com/guide/topics/ui/layout/linear.html

Sign up to request clarification or add additional context in comments.

Comments

24

If what you're looking to do is to make all the buttons the width of the widest button, setting weights isn't going to do that. Rather, you can put all the buttons in a TableLayout:

 <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/short_text" /> </TableRow> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/enter_manually" /> </TableRow> </TableLayout> 

This layout will show 2 buttons, one on top of the other, the same width.

3 Comments

This answer is slept on hard
I didn't get weather its appreciation or sarcasm !
I prefer using this method instead of using the weight attribute. It is definetely underrated.
6

set to each button:

android:layout_weight="0.5" android:layout_width="0dp" 

Comments

3
Display display=getWindowManager().getDefaultDisplay(); int width=display.getWidth(); btn1.setWidth(width/2); btn2.seTwidth(width/2); 

Set anything in xml file then first find width of device then set width half to both button Now On every device they will look exactly same

2 Comments

I think this solution goes against the spirit of defining the layout in an XML resource. Che Jami's solution is better.
This solution is the best for me better than xml. Thank you.
3
<LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="40dp" android:layout_weight="1" android:text="One" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="40dp" android:layout_weight="1" android:text="Two" /> </LinearLayout> 

These is the example for equal size buttons for side by side can be done from above code

android:layout_weight 

is used to assign space for buttons or whatever of equal amount for every child of LinearLayout.

Note: It works only on linear layout.

2 Comments

please add some more commentry to your answer. what did you cahnge? why is your answer right? what have you corrected? please look over your answer and add some more Details. thanks.
okay @cramopy tell me if you still want detailed description.
2
android:layout_weight="0.5" android:layout_width="0dp 

it's working

Comments

1

Set android:layout_weight="1" in the containing layout The linear layout should have android:orientation set as horizontal. And then the inside buttons should have the following:

android:layout_width="0dp"

android:layout_weight="0.5"

Comments

1

This is working:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="my btn 1"/> <Button android:layout_width="0dp" android:layout_weight="0.5" android:layout_height="wrap_content" android:text="my btn 2"/> </LinearLayout> 

1 Comment

A comment on how / why your code solves the problem would go a long way to make it more helpful.
-1

You can set them in linear layout nested in relative layout like this

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/bestBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:textStyle="bold" android:layout_marginBottom="5dp" android:textAllCaps="false" android:textSize="16sp" android:textColor="@color/grey_light2" android:background="@drawable/sharefb_btn" android:text="@string/sharefb" /> <Button android:id="@+id/playBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/grey_light2" android:textAllCaps="false" android:textSize="16sp" android:layout_marginBottom="50dp" android:textStyle="bold" android:background="@drawable/puzzle_opening_btn_ncvtelen_3" android:text="@string/playagain" /> </LinearLayout> 

and you will get somethiing like that

enter image description here

Comments

-1

You can set android:layout_width="match_parent". by setting android:layout_marginHorizontal to a fixed value in a Layout android:orientation="vertical" will make the buttons same size.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.