LinearLayout 权重分布不均匀
我有一个 LinearLayout,有四个水平布局的视图。第一个和最后一个组件是固定大小的。对于内部两个视图,我只想以 50:50 共享可用空间。我将每个视图的权重设置为“1”,但是当布局视图时,视图的大小根据它们所包含的内容而不同。
这是我的布局 xml 供参考。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/status"
android:src="@drawable/white"
android:paddingRight="10dip"
android:layout_height="35dip"
android:layout_width="35dip">
</ImageView>
<TextView android:id="@+id/name"
android:text="Name"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/status"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/description"
android:text="Description"
android:layout_toRightOf="@id/name"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/time"
android:text="Time"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/description"
android:textSize="25dip">
</TextView>
</LinearLayout>
显然这些不是实际的列名称,但出于隐私目的我更改了它们。此布局由 ListView 使用,它将每个视图的文本更改为其呈现的任何值。名称和描述字段应该对齐,因为它们都占据了剩余屏幕的 50%,但是当名称较长时,描述会向右移动。为什么?
I have a LinearLayout that has four views layed out horizontally. The first and last component are a set size. For the inner two views I want to just share the available space 50:50. I set each to a weight of "1" but when the views are layed out, the views are different sizes depending on the content they hold.
Here is my layout xml for reference.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/status"
android:src="@drawable/white"
android:paddingRight="10dip"
android:layout_height="35dip"
android:layout_width="35dip">
</ImageView>
<TextView android:id="@+id/name"
android:text="Name"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/status"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/description"
android:text="Description"
android:layout_toRightOf="@id/name"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textSize="25dip">
</TextView>
<TextView android:id="@+id/time"
android:text="Time"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_toRightOf="@id/description"
android:textSize="25dip">
</TextView>
</LinearLayout>
Obviously these aren't the actual column names but I changed them for privacy purposes. This layout is used by a ListView which changes the text of each view to be whatever value its presented. The name and description fields should line up since they're both given 50% of the remaining screen but when the name is longer the description is shifted right. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于要考虑的重量,布局尺寸需要为 0(零),
我还建议将重量加起来为 1(并使用分数)或 100。
因此,您可以为每个重量使用 50 或 0.5,而不是 1看法。 LinearLayout 代码可以在任何权重总和下正常工作,但如果您想稍后使用其他部分修改视图,则会变得很困难。
另外,如果您不使用相对布局,请删除 toRightOf 属性。少即是多。
For the weight to be considered, the layout dimension needs to be 0 (zero)
I also recommend making your weight add up to either 1 (and use fractions) or 100.
So instead of 1 you would use either 50 or .5 for each view. The LinearLayout code will work properly with any weight sum, but it gets difficult if you want to modify your view later with additional sections.
Also, if you are not using relative layout, get rid of the toRightOf attributes. Less is more.
尝试在
LinearLayout
的所有子级中使用android:layout_width="fill_parent"
而不是“wrap_content”。或者更好的是,在您的 xml 中创建这样的结构:这应该可以满足您的要求。使用
LinearLayout
而不是RelativeLayout
也可能有效,但您必须进行一些实验(我相信使用嵌套布局,如我的示例中所示,可以完成这项工作)。Try to use
android:layout_width="fill_parent"
instead of "wrap_content" in all children ofLinearLayout
. Or better yet, make such a structure in your xml:This should do what you want. Using
LinearLayout
instead ofRelativeLayout
might work too, but you have to experiment a bit (I believe using nested Layout, as in my example, will do the work).