Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Children in Linear Layout with equal padding

I am currently designing a ButtonBar with 5 buttons (they will all be ImageButtons, but for now, only 3 of them are). This is my first android project so I'm learning as I go along. I'm trying to weight each button equally, without scaling them (have equal padding rather than equal width). This is my code so far:

<LinearLayout
 android:id="@+id/back"
 android:orientation="horizontal"
 android:layout_height="50dip"
 android:layout_width="fill_parent" 
 android:layout_alignParentBottom="true" 
 android:background="#000000"
 style="@android:style/ButtonBar"
 android:weightSum="5"
 >

  <ImageButton
    android:id="@+id/info_button"
    android:padding="20dp"
    android:background="@drawable/info"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    />
  <Button 
    android:id="@+id/wishlist_button" 
    android:text="@string/wish_label"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:padding="20dp"
    android:textSize="15dip"
    android:textColor="#b7b7b7"></Button>
  <Button 
    android:id="@+id/buy_button"
    android:text="@string/buy_label"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:padding="20dp"
    android:textSize="15dip"
    android:textColor="#b7b7b7"/>
  <ImageButton
    android:id="@+id/dislike_button"
    android:padding="20dp"
    android:background="@drawable/dislike_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_weight="1"
  />
  <ImageButton
    android:id="@+id/like_button"
    android:padding="20dp"
    android:background="@drawable/like_button"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:layout_weight="1"
   />

This is what it looks like now: stretched weighted: http://i.imgur.com/MAfjp.png

This is what I want it to look like (closely): non-stretched equally padded: http://i.imgur.com/vXTEy.png

Thank you for helping. I've been searching for the answer for a while and have tried so much already.

like image 570
jbenowitz Avatar asked Jun 22 '11 23:06

jbenowitz


2 Answers

Here it is:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/back"
    android:orientation="horizontal"
    android:layout_height="50dip"
    android:layout_width="fill_parent" 
    android:layout_alignParentBottom="true" 
    android:background="#000000"
    style="@android:style/ButtonBar"
    android:gravity="center"
    >
   <ImageButton
    android:id="@+id/info_button"
    android:background="@null"
    android:src="@drawable/info"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_weight="1"
    />
  <Button 
    android:id="@+id/wishlist_button" 
    android:text="@string/wish_label"
    android:background="@null"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:layout_weight="1"
    android:textSize="15dip"
    android:textColor="#b7b7b7"></Button>
  <Button 
    android:id="@+id/buy_button"
    android:text="@string/buy_label"
    android:background="@null"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_weight="1"
    android:textSize="15dip"
    android:textColor="#b7b7b7"/>
  <ImageButton
    android:id="@+id/dislike_button"
    android:background="@null"
    android:src="@drawable/dislike_button"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_weight="1"
  />
  <ImageButton
    android:id="@+id/like_button"
    android:background="@null"
    android:src="@drawable/like_button"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:layout_weight="1"
   />
</LinearLayout>

I don't know how style="@android:style/ButtonBar" is set, so if it doesn't show properly try remove it.

like image 139
BrainCrash Avatar answered Sep 28 '22 02:09

BrainCrash


You could add a spacer element in between each of the images/buttons and assign the layout_weight to the spacer elements instead of the images/buttons. So it would look something like this:

<LinearLayout
 android:id="@+id/back"
 android:orientation="horizontal"
 android:layout_height="50dip"
 android:layout_width="fill_parent" 
 android:layout_alignParentBottom="true" 
 android:background="#000000"
 style="@android:style/ButtonBar"
 >

  <ImageButton
    android:id="@+id/info_button"
    android:padding="20dp"
    android:background="@drawable/info"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    />
      <LinearLayout
        android:layout_height="wrap_content"            
        android:layout_weight="1" />
  />
  <Button 
    android:id="@+id/wishlist_button" 
    android:text="@string/wish_label"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:padding="20dp"
    android:textSize="15dip"
    android:textColor="#b7b7b7"></Button>
      <LinearLayout
        android:layout_height="wrap_content"            
        android:layout_weight="1" />
  <Button 
    android:id="@+id/buy_button"
    android:text="@string/buy_label"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:padding="20dp"
    android:textSize="15dip"
    android:textColor="#b7b7b7"/>
      <LinearLayout
        android:layout_height="wrap_content"            
        android:layout_weight="1" />
  <ImageButton
    android:id="@+id/dislike_button"
    android:padding="20dp"
    android:background="@drawable/dislike_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
  />
      <LinearLayout
        android:layout_height="wrap_content"            
        android:layout_weight="1" />
  <ImageButton
    android:id="@+id/like_button"
    android:padding="20dp"
    android:background="@drawable/like_button"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
   />
</LinearLayout>

This may not be the most elegant solution since it adds several views to your layout, but it's worked for me in the past.

like image 30
Rico Yao Avatar answered Sep 28 '22 04:09

Rico Yao