我真的把头发拉过来。一些背景。我有一个项目列表,旁边都有复选框。取消选中复选框后,会出现一个按钮,允许您从列表中删除该项目。这看起来似乎是倒退,但我们只希望“选定”的项目有资格进行进一步处理等。这是我的布局:
<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_gravity
,gravity
,layout_centerVertical
,没有任何效果。我确定我的问题是在某个地方翻转的一个小小的设置,但是我真的很想知道这个。
编辑:我知道textview是“fill_vertical”,这是我正在尝试的一些随机的东西。
答案 0 :(得分:59)
此属性适用于使用Button
RelativeLayout
进行居中
android:layout_centerInParent="true"
答案 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_horizontal”作为引用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"/>
由于