Android布局以RelativeLayout为中心定制ListView

我真的把我的头发拉出来。 一些背景。 我有一个项目列表,旁边都有checkbox。 当您取消selectcheckbox时,会出现一个button,允许您从列表中删除该项目。 这起初似乎倒退了,但我们只希望“选定”的项目有资格进一步处理,等等。这是我的布局:

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

我无法将这三件物品垂直放在我的排中,以挽救我的生命。 layout_gravitygravitylayout_centerVertical ,它们都layout_gravity 。 我敢肯定,我的问题是在某个地方轻微的转换,但是我真的在这个问题上有了自己的想法。

编辑:我知道textview是“fill_vertical”,这是我尝试的一些随机的东西。

Solutions Collecting From Web of "Android布局以RelativeLayout为中心定制ListView"

您的问题可能不是由于布局,但如何膨胀的布局。 事实上,这可能是我的错,取决于你学习技术的地方。

引用无所不在的罗曼·盖伊 :

在适配器中正确使用inflate()是:

inflate(layoutId,parent,false);

传递父(作为getView()中的参数给予您)允许UI工具包创build适当的LayoutParams对象。 传递false会告诉工具包不要调用parent.addView(theInflateChild),因为ListView稍后会做自己的魔术。

如果您使用inflate(layoutId, null) ,正如我一直以来build议的那样,除非您尝试使用RelativeLayout作为行的基本布局,并尝试使用垂直居中,否则生活还行。

我将会更新我的书籍,以反映未来几周的新build议。

这个属性为我使用RelativeLayout一个Button居中:

 android:layout_centerInParent="true" 

看到这个post: 你能在一个Button中居中RelativeLayout吗?

使用RelativeLayout,我没有运气与重力或layout_gravity。

android:layout_centerVertical="true"为我定位在我的RelativeLayout的孩子,所以你可以保留它,如果你需要。

这是一个布局,最终做到了我想要的。 我知道它忽略了layout_gravity属性(当然现在我找不到这个post),所以我抛弃了RelativeLayout。 无论哪种方式,嵌套LinearLayouts为我做的伎俩:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:id="@+id/llBlahBlahRowMain" android:padding="6dip"> <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" /> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" android:layout_height="wrap_content"> <TextView android:text="blah blah dynamically replaced text" android:id="@+id/tvItemText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="14dip" android:paddingLeft="3dip" android:layout_gravity="center_vertical" /> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnDelete" android:text="Delete" android:layout_gravity="center_vertical" android:focusable="false" /> </LinearLayout> 

你有没有尝试过android:gravity =“center_horizo​​ntal” 这里引用

我做了一个替代解决scheme,为我工作。 我把我的文本框元素,属性android:layout_height =“fill_parent”。 这样,文本元素就填满了所有的父项,所以内容正确alignment:)

 <TextView android:id="@+id/principal_li_descricao" android:layout_height="fill_parent" android:layout_width="wrap_content" android:layout_marginLeft="10dip" android:textColor="#ff000000" android:layout_centerVertical="true" android:gravity="center_vertical" android:layout_alignBottom="@+id/principal_li_icone" android:layout_toRightOf="@+id/principal_li_icone"/> 

谢谢