问题描述
在我的应用程序中,我想将元素定位在卡片视图下,使用值为 .3 和 .7 的 layout_weight
。然而,它所占用的空间似乎取决于我的卡片视图所拥有的文本长度。示例代码如下:
第一张卡片视图:
<androidx.cardview.widget.CardView
android:id="@+id/card_view_terminal"
android:layout_width="match_parent"
android:layout_height="118dp"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="5dp"
android:layout_marginHorizontal="15dp"
card_view:cardElevation="4dp"
android:layout_marginTop="22dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="14dp"
android:gravity="center_vertical"
android:weightSum="1">
<androidx.appcompat.widget.AppCompatimageView
android:layout_width="69dp"
android:layout_height="60dp"
android:src="@drawable/use_card_reader"
android:scaleType="centerInside"
android:layout_weight=".3"
android:background="@color/colorAccent"
/>
<LinearLayout
android:background="#87ceeb"
android:layout_weight="0.7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Card"
android:textColor="@color/navy"
android:textSize="17sp"
android:textStyle="bold"
android:textAlignment="center"
card_view:fontFamily="@font/assistant_semibold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click here to read the card"
android:textSize="14sp"
android:fontFamily="@font/assistant"
android:textColor="@color/navy"
android:textAlignment="textStart"
/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
第二张卡片视图:
[![<androidx.cardview.widget.CardView
android:id="@+id/manual_entry"
android:layout_width="match_parent"
android:layout_height="118dp"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="5dp"
android:layout_marginHorizontal="15dp"
card_view:cardElevation="4dp"
android:layout_marginTop="22dp"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="14dp"
android:weightSum="1"
android:gravity="center_vertical"
android:layout_marginEnd="14dp">
<androidx.appcompat.widget.AppCompatimageView
android:layout_width="69dp"
android:layout_height="54dp"
android:src="@drawable/manual_fill"
android:scaleType="centerInside"
android:layout_weight=".3"
android:background="@color/colorAccent"
/>
<LinearLayout
android:background="#87ceeb"
android:layout_weight="0.7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Paper"
android:textColor="@color/navy"
android:textSize="17sp"
android:textStyle="bold"
android:textAlignment="center"
card_view:fontFamily="@font/assistant_semibold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is some long explanation text"
android:textSize="14sp"
android:fontFamily="@font/assistant"
android:textColor="@color/navy"
android:textAlignment="textStart"
/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
附上图片:
如您所见,第二张卡片的图像长度较短,因为右侧的文本较长。我该如何解决这个问题,无论后面是什么文本,视图都将占用 0.3 和 0.7 的空间?
解决方法
You need to take static layout height.
<androidx.cardview.widget.CardView
android:id="@+id/card_view_terminal"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="5dp"
android:layout_marginHorizontal="15dp"
card_view:cardElevation="4dp"
android:layout_marginTop="22dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="118dp"
android:layout_marginHorizontal="14dp"
android:gravity="center_vertical"
android:weightSum="1">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="69dp"
android:layout_height="60dp"
android:src="@drawable/use_card_reader"
android:scaleType="centerInside"
android:layout_weight=".3"
android:background="@color/colorAccent"
/>
<LinearLayout
android:background="#87ceeb"
android:layout_weight="0.7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Card"
android:textColor="@color/navy"
android:textSize="17sp"
android:textStyle="bold"
android:textAlignment="center"
card_view:fontFamily="@font/assistant_semibold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click here to read the card"
android:textSize="14sp"
android:fontFamily="@font/assistant"
android:textColor="@color/navy"
android:textAlignment="textStart"
/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
,
LinerLayout 中的 layout_weight 以使其按预期工作,您应该注意这一点:
如果 LinerLayout 方向是垂直的,那么孩子的高度应该是 0dp 并且 layout_weight 值将决定孩子的高度>
如果 LinerLayout 方向是水平的,那么孩子的宽度应该是 0dp 并且 layout_weight 值将决定孩子的宽度
所以在你的代码中,孩子应该是这样的:
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="14dp"
android:weightSum="1"
android:gravity="center_vertical"
android:layout_marginEnd="14dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="odp"
android:layout_height="54dp"
android:src="@drawable/manual_fill"
android:scaleType="centerInside"
android:layout_weight=".3"
android:background="@color/colorAccent"
/>
<LinearLayout
android:background="#87ceeb"
android:layout_weight="0.7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Paper"
android:textColor="@color/navy"
android:textSize="17sp"
android:textStyle="bold"
android:textAlignment="center"
card_view:fontFamily="@font/assistant_semibold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is some long explanation text"
android:textSize="14sp"
android:fontFamily="@font/assistant"
android:textColor="@color/navy"
android:textAlignment="textStart"
/>
</LinearLayout>
</LinearLayout>