如果最初设置为不可见,则android setVisibility不会显示

我有一个占据全屏的表面。 点击一个button,我想另一个布局出现(设置types的东西)。 如果我首先看到覆盖层,那么我可以将其隐藏起来,然后再次看到没有任何问题。 但是如果我从无形开始的话,我再也看不到它了。 代码如下:

<?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); } } }; 

Solutions Collecting From Web of "如果最初设置为不可见,则android setVisibility不会显示"

有类似的错误,但这是由于我没有使用UiThread的愚蠢的错误。

 Activity act = (Activity)context; act.runOnUiThread(new Runnable(){ @Override public void run() { mLayoutLights.setVisibility(View.VISIBLE); } }); 

得到它了。 您必须设置布局中所有项目的可见性,而不仅仅是布局。 所以这个代码工作:

 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); } 

我会build议尝试三个独立的东西。

  1. 更改布局宽度和高度以包装内容,因为这可能是匹配父级的问题。
  2. 在视图上调用bringToFront
  3. 在FrameLayout中包装surfaceView(这与#2相关,但仍然可能有帮助)

在我的情况下,用一个普通的SurfaceView,我只是将视图设置为xml而不是INVISIBLE。 然后,我可以正确设置VISIBILITY。

只需将属性的宽度和高度设置为“fill_parent”而不是“match_parent”即可。 不需要为所有的孩子设置可见性,而只需要更高级别的容器/元素。

 case R.id.title_call_button: if(llButtonCallNow.getVisibility() != View.VISIBLE){ llButtonCallNow.setVisibility(View.VISIBLE); } else{ llButtonCallNow.setVisibility(View.GONE); Toast.makeText(getBaseContext(), ("Im here baby :)"), Toast.LENGTH_SHORT).show(); } break;