为什么我不能在 Android 的水平线性布局中添加超过 2 个元素?

Why can't I add more than 2 elements in my horizontal linear layout in Android?

我正在尝试为我的 android 应用程序创建一个 ListView。我创建了一个适配器单元格的 XML 用于膨胀到 ListView 中。但是我不能容纳两个以上的元素。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="100">


    <TextView
        android:id="@+id/serviceItemId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:layout_marginLeft="16dp"
        android:layout_weight="70"
        android:text="TextView"
        android:layout_marginStart="16dp" />

    <TextView
        android:id="@+id/serviceName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:layout_marginLeft="16dp"
        android:layout_weight="60"
        android:text="TextView"
        android:layout_marginStart="16dp" />

      <TextView
        android:id="@+id/serviceDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:layout_marginLeft="16dp"
        android:layout_weight="60"
        android:text="TextView"
        android:layout_marginStart="16dp" />   
</LinearLayout>
  • 去掉android:weightSum="100"中的parent
  • 在children中使用android:layout_width="0dp"

你可以检查the doc关于android:weightSum:

Defines the maximum weight sum. If unspecified, the sum is computed by adding the layout_weight of all of the children. This can be used for instance to give a single child 50% of the total available space by giving it a layout_weight of 0.5 and setting the weightSum to 1.0.

使用:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

      <TextView
        android:id="@+id/serviceItemId"
        android:layout_width="0dp"
        android:layout_weight="70"
        ..>

    <TextView
        android:layout_width="0dp"
        android:layout_weight="60"
        ../>

    <TextView
        android:layout_width="0dp"
        android:layout_weight="60"
        .. />

</LinearLayout>

在这里你可以找到more info关于重量的信息。

设置android:weightSum并不重要,您可以根据自己的喜好使用权重。

如果你想实现类似 50%-25%-25% 的东西,只需使用:

  • android:layout_weight="2"
  • android:layout_weight="1"
  • android:layout_weight="1"

回应您的评论 (抱歉我还不能 post 评论,所以会在这里留下这个解释) “是的,这解决了它。但是你如何指定每个宽度,因为我不能再使用 100 的比例了?”

你可以使用 layout_weight 作为你的 3 个 TextView,如果你将它们都设置为 layout_weigh = 1 这实际上意味着它们将占用相同数量的 space.

假设您希望第一个 TextView 比其他两个 TextView 大 2 倍,您可以简单地这样设置

TV1 , layout_weight =2

TV2 , layout_weight =1

TV3 , layout_weight =1

因此,您可以根据这种理解来使用权重,而不是大百分比。 希望这对您有所帮助!

在这个

上找到了很棒的 Whosebug post