对Android权重的误解

对Android权重的误解,android,Android,我尝试了几种不同的方法来计算重量,但显然,对于如何实现我的目标,存在着一些明显的错误理解。我只是想让ImageView占据整个屏幕宽度的1/3,而让TextView的布局占据整个屏幕宽度的2/3 然而,当我尝试操作它时,最终得到的结果是,ImageView很小,几乎没有占用它应该占用的空间。我整个上午都在胡闹,想把布局弄对 下面的答案让我得出以下结论,这就是本例中发生的情况: 权重有时有点违反直觉。尝试使用小数,使大的为.66,小的为.34。有很多例子使用整数,但我相信在大多数情况下,最好使用

我尝试了几种不同的方法来计算重量,但显然,对于如何实现我的目标,存在着一些明显的错误理解。我只是想让ImageView占据整个屏幕宽度的1/3,而让TextView的布局占据整个屏幕宽度的2/3

然而,当我尝试操作它时,最终得到的结果是,ImageView很小,几乎没有占用它应该占用的空间。我整个上午都在胡闹,想把布局弄对

下面的答案让我得出以下结论,这就是本例中发生的情况:


权重有时有点违反直觉。尝试使用小数,使大的为.66,小的为.34。有很多例子使用整数,但我相信在大多数情况下,最好使用0到1之间的数字


编辑:所以我只是看了一下您的xml,并意识到它可能更多是因为您使用的宽度和高度。为了获得最佳的权重效果,您应该使用“填充父项”。

权重有时有点违反直觉。尝试使用小数,使大的为.66,小的为.34。有很多例子使用整数,但我相信在大多数情况下,最好使用0到1之间的数字


编辑:所以我只是看了一下您的xml,并意识到它可能更多是因为您使用的宽度和高度。为了获得最佳的权重效果,您应该使用“填充父项”。

在线性布局中,有一个技巧可以使权重发挥作用-您应该将维度设置为将权重应用为零



类似于此。

在线性布局中,有一个使权重起作用的技巧-您应该设置维度以将权重应用于零



类似这样的东西。

关于重量,没有什么真正棘手的。使用权重表示的是“测量布局中的所有视图,然后获取剩余的空间,并根据它们的权重进行划分”。权重仅影响剩余空间。这就是为什么将所有视图的维度设置为
0dp
有效的原因,因为在这种情况下,所有空间都是剩余空间。

关于权重没有什么真正棘手的。使用权重表示的是“测量布局中的所有视图,然后获取剩余的空间,并根据它们的权重进行划分”。权重仅影响剩余空间。这就是为什么将所有视图的尺寸设置为
0dp
有效的原因,因为在这种情况下,所有空间都是剩余空间。

可能的重复,特别是这个答案:可能的重复,特别是这个答案:这是诀窍部分。我假设“包装内容”与“0dip”的工作原理类似。它正在等待来自源的重量或尺寸(如图像宽度/高度)的输入。哦,我明白了。不,wrap_内容只会为其指定适合其内容的最小大小。很高兴听到现在一切都好了,这是关键。我假设“包装内容”与“0dip”的工作原理类似。它正在等待来自源的重量或尺寸(如图像宽度/高度)的输入。哦,我明白了。不,wrap_内容只会为其指定适合其内容的最小大小。很高兴听到现在一切都好了。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:weightSum="3">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/skeleton" 
            android:layout_weight="1"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" 
            android:layout_weight="2">

            <EditText
                android:id="@+id/editText1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10" />

            <EditText
                android:id="@+id/editText2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>
<ImageView
    android:id="@+id/imageView1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:src="@drawable/display_pro_skeleton" 
    android:layout_weight="1"/>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:layout_weight="2">

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:ems="10" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:ems="10" />

</LinearLayout>