权重背后的Android逻辑

时间:2013-05-05 11:42:50

标签: android

所以我有这个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的空间。

上面真的是它的工作方式吗?它的大小与我想要的一样,但是......不确定我理解它背后的逻辑。

1 个答案:

答案 0 :(得分: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,表示空间的某些部分应保留为空格并按此处理(默认情况下,出现在{{的子项之后) 1}})。