将可见性设置为GONE不会隐藏imageView

时间:2018-08-18 11:23:34

标签: android imageview android-imageview

如以下发布的布局中所示。有一个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。

2 个答案:

答案 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);