Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setVisibility(GONE) view becomes invisible but still occupies space

I've got a view that is effectively is a button. Here is its XML layout (add_new.xml)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="horizontal">     <Button         android:id="@+id/buttonNew"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/bText"          android:onClick="addNew"/> </LinearLayout> 

When I set its visibility to GONE like this

v = getActivity().getLayoutInflater().inflate(R.layout.add_new, null); v.setVisibility(View.GONE); 

it disappears but still occupies space. Like this: enter image description here

This button is a header in the ListView, which is defined by this xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:id="@+id/porno" >      <ImageView         android:id="@+id/icon"         android:layout_width="30dp"         android:layout_height="40dp"         android:layout_marginLeft="4dp"         android:layout_marginRight="10dp"         android:layout_marginTop="4dp"         android:src="@drawable/ic_launcher">     </ImageView>      <TextView         android:id="@+id/label"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@+id/label"         android:textSize="20dp" >     </TextView>  </LinearLayout>  

And I dont want it to occupy an additional list item when its visibility is set to GONE. As it is stated in the documentation.

GONE - This view is invisible, and it doesn't take any space for layout purposes.

Any ideas on how to make it NOT occupy space?

Thanks, Dennis xx

P.S. My listview is inside of a FoldersFragment ListFragmentand here is the xml of my MainActivity where FoldersFragment is presented

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="horizontal" >      <fragment         android:id="@+id/foldersFragment"         android:layout_width="200dip"         android:layout_height="match_parent"         class="com.example.fragments.FoldersFragment" >     </fragment>      <fragment         android:id="@+id/detailFragment"         android:layout_width="match_parent"         android:layout_height="match_parent"         class="com.example.fragments.DetailFragment" >     </fragment>  </LinearLayout> 
like image 728
Denys Avatar asked Sep 06 '12 14:09

Denys


People also ask

How do you make a view invisible?

use setVisibility method. for hiding button you can use button. setVisibility(View. GONE);.. you can use View.


2 Answers

This is an Android bug in my opinion, we just fix this issue doing this:

<FrameLayout android:layout_width="match_parent"     android:layout_height="wrap_content">      <LinearLayout android:id="@+id/layout_to_hide"                   android:layout_width="match_parent"                   android:layout_height="wrap_content">          //Put here your views     </LinearLayout> </FrameLayout> 

Just hide LinearLayout with id LAYOUT_TO_HIDE with Visible.GONE and then root FrameLayout will collapse its height giving you a "hidden" with non-blank-space header.

like image 200
noni Avatar answered Sep 25 '22 12:09

noni


set layout_width and layout_height to 0 where you want to hide item, by doing this

//if item's parent layout is LinearLayout, change according to your item xml holder.itemView.setLayoutParams(new LinearLayout.LayoutParams(0,0)); 
like image 43
Asad Avatar answered Sep 25 '22 12:09

Asad