0

所以我有这个 XML 代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linearLayoutOuter"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="3.0"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1.0"
>
<Gallery
 android:id="@+id/galleryMain"
 android:layout_width="match_parent"
 android:layout_height="90dp">
</Gallery>
<LinearLayout
 android:id="@+id/linearLayoutInner"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@layout/gallery_image_background"
/>
</LinearLayout>


<TextView
android:id="@+id/galleryTextView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2.0"
>
</TextView>

</LinearLayout>

目前它的大小正确,但我认为这不正确。

从 3.0 可能的权重中获得 1.0 的 LinearLayout 需要大约 2/3 的空间。从 3.0 可能的重量中获得 2.0 的 TextView 需要大约 1/3 的空间。

以上真的是它的工作原理吗?它的大小和我想要的一样,但是......我不确定我是否理解它背后的逻辑。

4

1 回答 1

6

以上真的是它的工作原理吗?

考虑到你写它的方式,是的,但这就是我们通常不那样写的原因。:-)

更容易理解的重量方法android:weightSum是将高度设置为0dp,而不是match_parent。然后,每个孩子根据权重获得一定比例的可用空间。

因此,要以这种方式拆分 2/3 和 1/3,您将拥有:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/linearLayoutOuter"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="3.0"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="2.0"
>
<Gallery
 android:id="@+id/galleryMain"
 android:layout_width="match_parent"
 android:layout_height="90dp">
</Gallery>
<LinearLayout
 android:id="@+id/linearLayoutInner"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@layout/gallery_image_background"
/>
</LinearLayout>


<TextView
android:id="@+id/galleryTextView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
>
</TextView>

</LinearLayout>

注意:

  • 你可以在这里使用整数

  • 在这种情况下您不需要android:weightSum,因为您的权重总和已经是该值。您将android:weightSum在权重总和小于实际总和的情况下使用,这表明空间的某些部分应保留为空白并按原样处理(默认情况下,出现在 的子级之后LinearLayout)。

于 2013-05-05T11:52:07.673 回答