布局权重和最大宽度

3

我有如下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="56dp"
              android:baselineAligned="false"
              android:gravity="center_horizontal"
              android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img1"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img2"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:maxWidth="168dp"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img3"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:maxWidth="168dp"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img4"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>


    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img5"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>
    </LinearLayout>
</LinearLayout>

我希望每个线性布局的子元素都能够拥有80dp的宽度,直到达到168dp并平均地分配空间。我不知道如何使用布局权重来表达“平均分配空间,直到168dp”。我尝试使用maxWidth,但它似乎没有起作用。

你尝试过为父布局分配android:weightSum吗? - O.O.Balance
不,我不知道怎么做。 - greywolf82
2个回答

0

你应该使用android:weightSum

定义最大权重总和。如果未指定,则通过添加所有子项的layout_weight来计算总和。例如,可以通过将layout_weight设置为0.5并将weightSum设置为1.0,使单个子项占用总可用空间的50%。

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:weightSum="10"
      android:baselineAligned="false"
      android:gravity="center_horizontal"
      android:orientation="horizontal">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical"
            android:paddingBottom="8dp"
            android:paddingEnd="12dp"
            android:paddingStart="12dp"
            android:paddingTop="8dp">
           ......................           
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical"
            android:paddingBottom="8dp"
            android:paddingEnd="12dp"
            android:paddingStart="12dp"
            android:paddingTop="8dp">
            ..............

        </LinearLayout>
        ...........

    </LinearLayout> 

知道吗

据我所知,如果您使用android:layout_heightandroid:minWidth将无法正常工作。


这似乎不是我想要的。我想将最大值设置为168dp。 - greywolf82
@ greywolf82 我猜 android:minWidth 没有起作用。 - IntelliJ Amiya
1
是的,当您设置权重时,最小值和最大值似乎没有影响。 - greywolf82
@ greywolf82,那么请避免使用android:layout_weight逻辑。 - IntelliJ Amiya
是的,但我该如何说“设置宽度最小80dp,最大168dp并分配其他部分”? - greywolf82
显示剩余4条评论

0

通过在BaseLayout中设置android:weightSum="5"并删除android:minWidth,可以实现以下布局等间距分配空间

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="56dp"
              android:baselineAligned="false"
              android:gravity="center_horizontal"
              android:orientation="horizontal"
              android:weightSum="5">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img1"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img2"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img3"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:minWidth="80dp"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img4"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>

    </LinearLayout>


    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp">

        <ImageView
            android:id="@+id/img5"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_search"
            tools:ignore="ContentDescription"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/latitude"
            android:textAlignment="center"
            android:textSize="12sp"/>
    </LinearLayout>
</LinearLayout>

这不是我想要的。我希望空间均匀分布,但最多只能到168dp。用这个解决方案无法实现。 - greywolf82

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接