如以下发布的布局中所示。有一个ImageView是“ cardViewImageViewRight”。当我将此视图的可见性设置为GONE时,我希望整个空间都可以使用。此imageView占用的空间将消失。但是发生的是,当我将可见性设置为GONE时,只有图像本身消失了,而视图仍然占据了相同的空间。
为什么当我将可见性设置为GONE时,只有图像消失并且imageView占用的空间仍然存在?
代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
cardview:cardCornerRadius="2dp"
cardview:cardElevation="3dp"
cardview:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:visibility="visible"
android:weightSum="6">
<ImageView
android:id="@+id/cardViewImageViewLeft"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/ic_launcher"
android:visibility="visible" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="6">
<TextView
android:id="@+id/cardViewTextViewName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:text="Name: " />
<TextView
android:id="@+id/cardViewTextViewDate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="18.08.2019" />
</LinearLayout>
<TextView
android:id="@+id/cardViewTextViewDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Description Description Description Description" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="7">
<TextView
android:id="@+id/cardViewTextViewPriceLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Price: " />
<TextView
android:id="@+id/cardViewTextViewPrice"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="299.999 " />
<TextView
android:id="@+id/cardViewTextViewCurrency"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Eur" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="end">
<RatingBar
android:id="@+id/cardViewRatingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="3"
android:stepSize=".5" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/cardViewImageViewRight"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:src="@drawable/ic_launcher"
android:visibility="visible" />
</LinearLayout>
</android.support.v7.widget.CardView>
注意:
如上述布局所示,我有两个图像视图,分别在右侧和左侧。当我将左侧的可见性设置为GONE时,整个imageview消失了,这就是我想要的。但是,当我对右侧的imageView执行相同的操作时,正如上面在我的问题中提到的那样,只有图像消失了,但是imageview itsef的视图仍然存在。
左右图像视图都属于同一父级线性布局,该线性布局包含weight_sum = 6。
答案 0 :(得分:0)
您必须将LinearLayout的可见性设置为GONE才能正确溶解视图以及imageview,而LinearLayout占用了空间
答案 1 :(得分:0)
由于已为视图赋予权重1、4、1,因此将可见性更改为gone
无效。
问题是您分配的权重。
将左图的可见性设置为GONE时,中间布局就会出现并占据其位置,但其宽度仍与以前相同。当您将可见性设置为GONE到正确的图像时,没有什么可替代的,因此您必须通过代码更改中间布局的权重。
在左侧的布局中输入ID:android:id="@+id/linearLayout"
然后通过findViewById
获取它:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
最后将其权重更改为5:
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linearLayout.getLayoutParams();
params.weight = 5f;
linearLayout.setLayoutParams(params);