自定义ListView的RelativeLayout中的Android布局居中
Posted
技术标签:
【中文标题】自定义ListView的RelativeLayout中的Android布局居中【英文标题】:Android layout centering in RelativeLayout for custom ListView 【发布时间】:2010-12-02 17:48:58 【问题描述】:我真的把头发拉出来了。一些背景。我有一个项目列表,它们旁边都有复选框。当您取消选择复选框时,会出现一个按钮,允许您从列表中删除该项目。起初这似乎是倒退的,但我们只希望“选定”项目有资格进行进一步处理等。这是我的布局:
<RelativeLayout android:id="@+id/rlBlahBlah"
android:layout_
android:layout_
android:minHeight="?android:attr/listPreferredItemHeight"
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBox android:text=""
android:id="@+id/cbDeleteItem"
android:layout_
android:layout_
android:layout_gravity="center_vertical"
android:focusable="false"
/>
<TextView android:text=""
android:id="@+id/tvItemText"
android:layout_
android:layout_
android:textSize="14dip"
android:paddingLeft="3dip"
android:paddingRight="3dip"
android:paddingTop="13dip"
android:gravity="fill_vertical"
android:layout_toRightOf="@id/cbDeleteItem"
/>
<Button android:layout_
android:id="@+id/btnDelete"
android:text="Delete"
android:layout_
android:layout_alignParentRight="true"
android:gravity="center_vertical"
android:focusable="false"
/>
</RelativeLayout>
我无法让这 3 件物品在我的行中垂直居中以挽救我的生命。 layout_gravity
,gravity
,layout_centerVertical
,都不起作用。我确定我的问题是在某个地方翻转了一些微小的设置,但我真的对此束手无策。
编辑:我知道 textview 是“fill_vertical”,这是我正在尝试的一些随机的东西。
【问题讨论】:
您是否尝试过将重力属性应用于父级 RelativeLayout 视图?值得一试。 【参考方案1】:此属性对我使用 RelativeLayout
居中 Button
有用:
android:layout_centerInParent="true"
看到这个帖子: Can you center a Button in RelativeLayout?
【讨论】:
谢谢你,它有时真的值得一读低评价的答案。 我找到的最佳答案 谢谢,对这个答案持怀疑态度,但这是解决这个问题的确切方法......这应该被接受的答案...... 如何判断是水平居中还是垂直居中?【参考方案2】:您的问题可能不是由于布局,而是您如何膨胀布局。事实上,这甚至可能是我的错,这取决于你从哪里学到的技术......
引用无所不在的Romain Guy:
inflate() 的正确用法 适配器是:
inflate(layoutId, parent, false);
传递父级(作为 getView()) 中的参数允许 UI 工具包来创建适当的 布局参数对象。传递假 告诉工具包不要调用 parent.addView(theInflateChild),因为 ListView 稍后会发挥自己的魔力 开。
如果您使用inflate(layoutId, null)
,就像我传统上建议的那样,除非您尝试使用RelativeLayout
作为行的基本布局并尝试使用垂直居中,否则生活是可以的。
我将在接下来的几周内更新我的书籍等以反映新的建议。
【讨论】:
我实际上正在使用您的技术:P 我还阅读了 Romain Guy 的一篇文章,指出 RelativeLayout 忽略了 layout_gravity 属性。我正在发布一个完全符合我想要的新布局的答案。不过,感谢您的回复!【参考方案3】:使用 RelativeLayout,我对重力和 layout_gravity 都没有运气。
但android:layout_centerVertical="true"
为我工作,位于我的 RelativeLayout 的子级中,因此您可以根据需要保留它。
【讨论】:
宾果游戏!解决了我的问题。谢谢。【参考方案4】:这是一个最终完全符合我要求的布局。一旦我得知 RelativeLayout 忽略了 layout_gravity
属性,我就放弃了(当然现在我找不到帖子了)。无论哪种方式,嵌套的 LinearLayouts 都为我解决了问题:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:minHeight="?android:attr/listPreferredItemHeight"
android:id="@+id/llBlahBlahRowMain"
android:padding="6dip">
<CheckBox android:text=""
android:id="@+id/cbDeleteItem"
android:layout_
android:layout_
android:layout_gravity="center_vertical"
android:focusable="false"
/>
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:layout_>
<TextView
android:text="blah blah dynamically replaced text"
android:id="@+id/tvItemText"
android:layout_
android:layout_
android:layout_weight="1"
android:textSize="14dip"
android:paddingLeft="3dip"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
<Button android:layout_
android:layout_
android:id="@+id/btnDelete"
android:text="Delete"
android:layout_gravity="center_vertical"
android:focusable="false"
/>
</LinearLayout>
【讨论】:
【参考方案5】:您是否尝试过 android:gravity="center_horizontal" 引用 here
【讨论】:
我正在寻找布局中的垂直居中。 那里还有一个center_vertical。 我发现的重力中心项目。我想要的是 layout_gravity,但根据我阅读的 Romain Guy 的一些帖子,RelativeLayout 最终忽略了 layout_gravity【参考方案6】:我做了一个替代解决方案,它对我有用。我在我的文本框元素上放置了属性 android:layout_。这样,文本元素填充了父元素的所有高度,因此内容正确对齐:)
<TextView android:id="@+id/principal_li_descricao"
android:layout_
android:layout_
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"/>
谢谢
【讨论】:
以上是关于自定义ListView的RelativeLayout中的Android布局居中的主要内容,如果未能解决你的问题,请参考以下文章