LinearLayout 权重分布不均匀

发布于 2024-11-09 23:06:55 字数 1710 浏览 2 评论 0原文

我有一个 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.
Screen shot of the layout. The data is hidden but it shows how offset the views are

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

潇烟暮雨 2024-11-16 23:06:55

对于要考虑的重量,布局尺寸需要为 0(零),

<TextView android:id="@+id/name" 
    android:text="Name" 
    android:layout_height="fill_parent"  
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:textSize="25dip">
</TextView>

我还建议将重量加起来为 1(并使用分数)或 100。

因此,您可以为每个重量使用 50 或 0.5,而不是 1看法。 LinearLayout 代码可以在任何权重总和下正常工作,但如果您想稍后使用其他部分修改视图,则会变得很困难。

另外,如果您不使用相对布局,请删除 toRightOf 属性。少即是多。

For the weight to be considered, the layout dimension needs to be 0 (zero)

<TextView android:id="@+id/name" 
    android:text="Name" 
    android:layout_height="fill_parent"  
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:textSize="25dip">
</TextView>

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.

一萌ing 2024-11-16 23:06:55

尝试在 LinearLayout 的所有子级中使用 android:layout_width="fill_parent" 而不是“wrap_content”。或者更好的是,在您的 xml 中创建这样的结构:

<RelativeLayout>
    <ImageView />       # status, fixed width, alignParentLeft="true"
    <TextView />        # time, fixed width, alignParentRight="true"
    <LinearLayout>      # layout_width="fill_parent", toLeftOf="time" toRightOf="status"
        <TextView />    # name, use layout_weight="1"
        <TextView />    # description, use layout_weight="1"
    </LinearLayout>
</RelativeLayout>

这应该可以满足您的要求。使用 LinearLayout 而不是 RelativeLayout 也可能有效,但您必须进行一些实验(我相信使用嵌套布局,如我的示例中所示,可以完成这项工作)。

Try to use android:layout_width="fill_parent" instead of "wrap_content" in all children of LinearLayout. Or better yet, make such a structure in your xml:

<RelativeLayout>
    <ImageView />       # status, fixed width, alignParentLeft="true"
    <TextView />        # time, fixed width, alignParentRight="true"
    <LinearLayout>      # layout_width="fill_parent", toLeftOf="time" toRightOf="status"
        <TextView />    # name, use layout_weight="1"
        <TextView />    # description, use layout_weight="1"
    </LinearLayout>
</RelativeLayout>

This should do what you want. Using LinearLayout instead of RelativeLayout might work too, but you have to experiment a bit (I believe using nested Layout, as in my example, will do the work).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文