为什么我不能在 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
我正在尝试为我的 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