Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android layout centering in RelativeLayout for custom ListView

I'm really pulling my hair out over this one. Some background. I have a list of items that all have checkboxes next to them. When you deselect a checkbox, a button appears that allows you to delete the item from the list. This seems backwards at first but we only want "selected" items to be eligible for further processing, etc. This is my layout:

<RelativeLayout android:id="@+id/rlBlahBlah" 
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:minHeight="?android:attr/listPreferredItemHeight"
                xmlns:android="http://schemas.android.com/apk/res/android">
  <CheckBox android:text="" 
            android:id="@+id/cbDeleteItem" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:focusable="false"
            />
  <TextView android:text="" 
            android:id="@+id/tvItemText" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:textSize="14dip"
            android:paddingLeft="3dip"
            android:paddingRight="3dip"
            android:paddingTop="13dip"
            android:gravity="fill_vertical"
            android:layout_toRightOf="@id/cbDeleteItem"
            />
  <Button android:layout_height="wrap_content" 
          android:id="@+id/btnDelete" 
          android:text="Delete" 
          android:layout_width="wrap_content"
          android:layout_alignParentRight="true"
          android:gravity="center_vertical"
          android:focusable="false"
          />
</RelativeLayout>

I cannot get the 3 items to center vertically in my row to save my life. layout_gravity, gravity, layout_centerVertical, none of it works. I'm sure my issue is some tiny setting to flip somewhere, but I'm really at wits end on this.

edit: I know the textview is "fill_vertical", that's some random stuff I was trying.

like image 257
MattC Avatar asked Sep 30 '09 17:09

MattC


2 Answers

This attribute worked for me centering a Button using RelativeLayout:

android:layout_centerInParent="true"

See this posting: Can you center a Button in RelativeLayout?

like image 152
John Avatar answered Oct 13 '22 01:10

John


Your problem is probably not due to the layout, but how you are inflating the layout. In fact, it might even be my fault, depending on where you learned your technique...

To quote the omnipresent Romain Guy:

the correct usage of inflate() in adapters is:

inflate(layoutId, parent, false);

Passing the parent (given to you as a parameter in getView()) allows the UI toolkit to create the appropriate LayoutParams object. Passing false tells the toolkit to NOT call parent.addView(theInflateChild), since ListView will do its own magic later on.

If you use inflate(layoutId, null), as I have traditionally advised, life is OK unless you try using RelativeLayout as the base layout of the rows and try to use vertical centering.

I will be updating my books and such to reflect the new advice in the coming weeks.

like image 28
CommonsWare Avatar answered Oct 12 '22 23:10

CommonsWare