为啥我不能在 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
的百分比,但我使用的是来自LinearLayout
的weightSum
的权重,并且通常用于超过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 个元素?的主要内容,如果未能解决你的问题,请参考以下文章