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

Posted

技术标签:

【中文标题】为啥我不能在 Android 的水平线性布局中添加超过 2 个元素?【英文标题】:Why can't I add more than 2 elements in my horizontal linear layout in Android?为什么我不能在 Android 的水平线性布局中添加超过 2 个元素? 【发布时间】:2020-10-14 09:10:08 【问题描述】:

我正在尝试为我的 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_
    android:layout_
    android:weightSum="100">


    <TextView
        android:id="@+id/serviceItemId"
        android:layout_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        android:gravity="start"
        android:layout_marginLeft="16dp"
        android:layout_weight="60"
        android:text="TextView"
        android:layout_marginStart="16dp" />   
</LinearLayout>

【问题讨论】:

为 LinearLayout 设置 android:weightSum="3" 和所有 TextView android:layout_weight="1" 是的,修复了它。但是,由于我不能再使用 100 的比例,你如何指定每个需要的宽度? LinearLayout 更改为ConstraintLayout 并使用app:layout_constraintWidth_percent 作为百分比。 【参考方案1】: 删除父级中的android:weightSum="100" 在儿童中使用android:layout_width="0dp"

您可以查看the doc关于android:weightSum

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

用途:

<LinearLayout
    android:orientation="horizontal"
    android:layout_
    android:layout_
    >

      <TextView
        android:id="@+id/serviceItemId"
        android:layout_
        android:layout_weight="70"
        ..>

    <TextView
        android:layout_
        android:layout_weight="60"
        ../>

    <TextView
        android:layout_
        android:layout_weight="60"
        .. />

</LinearLayout>

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

设置android:weightSum并不重要,你可以使用你喜欢的重量。

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

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

【讨论】:

android:weightSum="100" 实际上很好,因为他可以像使用实际百分比一样使用它,但是是的,在使用权重时,应该始终使用 0dp 来表示布局所针对的维度。 因为您已将视图设置为match_parent。我从未使用过来自ConstraintLayout 的百分比,但我使用的是来自LinearLayoutweightSum 的权重,并且通常用于超过2 个视图 @SkypeDogg 如果您想指定最大值,这可能会很好(如 1.0)。如果在子视图中使用 70+60+60,则意味着只会显示其中的一部分。 @Gabriele Mariotti 是的,没错,很明显,当整个布局为 100% 时,使用超过 100% 是不可能的 @YashJain 在你的情况下是 190。但你可以简单地删除它,因为它是自动的。这意味着第一个视图是 70/200,然后是 60/200,最后是 60/200。但是你可以使用你喜欢的权重,如果你想要 50-25-25,只需使用 weight=2, weight=1, weight=1【参考方案2】:

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

如果你将它们全部设置为 layout_weigh = 1,你可以为你的 3 个 TextViews 使用 layout_weight 这实际上意味着它们都将占据相同数量的空间。

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

TV1 , layout_weight =2

TV2 , layout_weight =1

TV3 , layout_weight =1

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

在 https://***.com/a/4517358/4377908 上找到了一篇很棒的 *** 帖子

【讨论】:

完美,这就是我一直在寻找的答案。谢谢!

以上是关于为啥我不能在 Android 的水平线性布局中添加超过 2 个元素?的主要内容,如果未能解决你的问题,请参考以下文章

将 TextView 动态水平添加到等权线性布局

android 界面布局实现

Android Studio线性布局设计问题

android 线性布局 居右

如何在嵌套线性布局中使 imageButton 的高度占屏幕尺寸的 25%。 Android XML 横向布局

安卓开发常见布局方式学习