Android布局以RelativeLayout为中心,用于自定义ListView

时间:2009-09-30 17:28:11

标签: java android listview

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

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

为了挽救我的生命,我无法让3个项目垂直居中。 layout_gravitygravitylayout_centerVertical,没有任何效果。我确定我的问题是在某个地方翻转的一个小小的设置,但是我真的很想知道这个。

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

6 个答案:

答案 0 :(得分:59)

此属性适用于使用Button

RelativeLayout进行居中
android:layout_centerInParent="true"

查看此帖子: Can you center a Button in RelativeLayout?

答案 1 :(得分:24)

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

引用无所不在的Romain Guy

  

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

     

inflate(layoutId,parent,false);

     

传递父母(给予你作为   getView()中的参数允许UI   工具包创建合适的   LayoutParams对象。传递错误   告诉工具包不要打电话   parent.addView(theInflateChild),因为   ListView稍后会做自己的魔法   上。

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

我将更新我的书籍,以便在未来几周内反映新的建议。

答案 2 :(得分:16)

使用RelativeLayout,我在重力和layout_gravity方面没有运气。

但是android:layout_centerVertical="true"对我来说是位于我的RelativeLayout的孩子身上的,所以如果你需要,你可以保留它。

答案 3 :(得分:2)

这是一种布局,最终完全符合我的要求。一旦我得知它忽略了layout_gravity属性(当然我现在找不到帖子),我抛弃了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>

答案 4 :(得分:1)

您是否尝试过android:gravity =“center_horizo​​ntal”作为引用here

答案 5 :(得分:1)

我做了另一种解决方案,对我有用。我在我的textbox元素上放置了属性android:layout_height =“fill_parent”。这样,文本元素填充了父级的所有高度,因此内容正确对齐:)

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

由于