了解权重和layout_weight,layout_weight越大,布局中的缩小越多。

时间:2015-05-30 04:22:14

标签: android xml android-layout layout

我试图通过这个例子来理解重量布局。

绝对不是火箭科学。但是,这个例子制作它......

  • weightSum决定了它的大小和
  • 然后根据LinearLayout中视图的layout_weight值划分布局。

在这个例子中,我有一个布局,加权为5,然后在两个视图之间划分:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transactionRowBackground"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" android:orientation="horizontal" >

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

        <TextView
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true"
            android:gravity="top"
            android:padding="5dp"
            android:text="Test Title"
            android:textColor="@color/textColor"
            android:textSize="@dimen/subHeadingTextSize"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/description"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true"
            android:gravity="top"
            android:padding="5dp"
            android:text="This is a test description"
            android:textColor="@color/textColor"
            android:textSize="@dimen/normalTextSize" />

    </LinearLayout>


    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ic_launcher"
        android:layout_gravity="top"
        android:contentDescription="" />

</LinearLayout>

我无法理解的是,我向ImageViewer提供的数字越大,它从父级获得的空间就越小。那么它实际上是如何计算ImageView的大小的。

您可以尝试使用上面的xml。如果你将ImageView的布局权重更改为1,将子线性布局更改为4,我相信它更有意义,那么相反的情况就会发生。

ImageView将消耗,而儿童linearlayout将缩小。我认为数字越大你获得一些空间。

2 个答案:

答案 0 :(得分:3)

由于您的最外层布局为android:orientation="horizontal",我相信您希望改变ImageView和内部LinearLayout在水平方向上所占的大小/空间。对于这种情况,请尝试使用

android:layout_width="0dp"

在您放置android:layout_weight的布局上。如果外部布局的方向是垂直的,我会使用android:layout_height="0dp"来使权重处理布局的宽度/高度。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transactionRowBackground"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" android:orientation="horizontal" >

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

        <TextView
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true"
            android:gravity="top"
            android:padding="5dp"
            android:text="Test Title"
            android:textColor="@color/textColor"
            android:textSize="@dimen/subHeadingTextSize"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/description"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true"
            android:gravity="top"
            android:padding="5dp"
            android:text="This is a test description"
            android:textColor="@color/textColor"
            android:textSize="@dimen/normalTextSize" />

    </LinearLayout>


    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ic_launcher"
        android:layout_gravity="top"
        android:contentDescription="" />

</LinearLayout>

阅读Android文档可能有所帮助:Layout Weights

答案 1 :(得分:1)

使用mallopt(),您可以指定多个视图之间的大小比率。例如。你有一个layout_weight和一个表格,它应该向地图显示一些额外的信息。地图应使用屏幕的3/4,表格应使用屏幕的1/4。然后,您将地图的layout_weight设置为3,将表的MapView设置为1.

要使其正常工作,您还必须将高度或宽度(取决于您的方向)设置为layout_weight示例

如果有三个文本框,其中两个声明权重为1,而第三个没有赋予权重(0),则剩余空间分配如下:

  

第一个文本框= 1 /(1 + 1 + 0)

     

第二个文本框= 1 /(1 + 1 + 0)

     

第3个文本框= 0 /(1 + 1 + 0)