Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android setVisibility does not display if initially set to invisble

I have a glsurface occupying the full screen. At the click of a button I want another layout to appear (settings type of thing). If I start with the overlay being visible, I can make it invisible and then visible again with no problem. But if I start with it invisible, I cannot make it ever visible again. Code follows:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >      <android.opengl.GLSurfaceView     android:id="@+id/glPlaySurface"     android:layout_width="match_parent"     android:layout_height="match_parent" > </android.opengl.GLSurfaceView>  <RadioGroup     android:id="@+id/radioGroup1"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentBottom="true"     android:layout_alignParentLeft="true"     android:orientation="horizontal" >      <RadioButton         android:id="@+id/btnRotate"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="10dp"         android:checked="true"         android:text="R"         android:textColor="#000" />      <RadioButton         android:id="@+id/btnPan"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginLeft="15dp"         android:text="P"         android:textColor="#000" /> </RadioGroup>  <Button     android:id="@+id/btnLights"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentBottom="true"     android:layout_marginLeft="15dp"     android:layout_toRightOf="@+id/radioGroup1"     android:text="Lights" />  <RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/layoutLights"     android:layout_width="100dp"     android:layout_height="100dp"     android:visibility="visible" <--- Does not work if set to invisible     android:layout_alignParentBottom="true"     android:layout_alignParentRight="true"      android:background="#fff" >      <Button     android:id="@+id/btnLightsOK"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentBottom="true"     android:layout_alignParentLeft="true"     android:layout_marginLeft="15dp"     android:text="OK" />      <Button     android:id="@+id/btnLights"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentBottom="true"     android:layout_alignParentLeft="true"     android:layout_marginLeft="15dp"     android:text="OK" />  </RelativeLayout>  </RelativeLayout>   private OnClickListener mOnLightsClick = new OnClickListener() {     public void onClick(View arg0) {         if(mLayoutLights.getVisibility() == View.VISIBLE) {             mLayoutLights.setVisibility(View.INVISIBLE);         }         else {             mLayoutLights.setVisibility(View.VISIBLE);         }     } }; 
like image 405
user1248322 Avatar asked Mar 04 '12 16:03

user1248322


People also ask

How do you make a view visible and invisible on Android?

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

How do you change the visibility of a view?

try that setVisible(0) to visible true . and setVisible(4) to visible false. the text can be invisible but the button and datepicker no.

What is visibility gone in Android?

When a View is gone, it means it doesn't take any space in the layout. When it is invisible, it will take the necessary room in a layout but you just don't see it.


2 Answers

Had similar error but it was due to my silly mistake of not using the UiThread.

Activity act = (Activity)context; act.runOnUiThread(new Runnable(){ @Override public void run() {     mLayoutLights.setVisibility(View.VISIBLE);   } }); 
like image 86
Martin Sykes Avatar answered Sep 21 '22 13:09

Martin Sykes


Got it. You have to set the visibility of all the items in the layout, not just the layout. So this code worked:

if (mLayoutLights.getVisibility() == View.VISIBLE) {     ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.GONE); ((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.GONE); mLayoutLights.setVisibility(View.GONE); } else {     mLayoutLights.setVisibility(View.VISIBLE); ((Button) findViewById(R.id.btnLightsOK)).setVisibility(View.VISIBLE); ((Button) findViewById(R.id.btnLightsCnc)).setVisibility(View.VISIBLE); } 
like image 35
user1248322 Avatar answered Sep 23 '22 13:09

user1248322