Android setVisibility не отображается, если изначально установлен в невидимый - PullRequest
18 голосов
/ 04 марта 2012

У меня есть glsurface, занимающий весь экран.При нажатии на кнопку я хочу, чтобы появился другой макет (тип настройки вещи).Если я начну с видимого наложения, я могу сделать его невидимым, а затем снова видимым без проблем.Но если я начну с того, что он невидим, я не смогу сделать его снова видимым.Код следует:

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

Ответы [ 6 ]

21 голосов
/ 02 июля 2014

Была похожая ошибка, но это было из-за моей глупой ошибки не использовать UiThread.

Activity act = (Activity)context;
act.runOnUiThread(new Runnable(){
@Override
public void run() {
    mLayoutLights.setVisibility(View.VISIBLE);  
} });
15 голосов
/ 05 марта 2012

Понял.Вы должны установить видимость всех элементов макета, а не только макета.Так что этот код работал:

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);
}
8 голосов
/ 18 июня 2015

В моем случае, с простым SurfaceView, я просто установил View в GONE в xml, а не INVISIBLE. После этого я могу правильно установить VISIBILITY.

2 голосов
/ 04 марта 2012

Я бы предложил попробовать три независимых вещи.

  1. Изменение ширины и высоты макета для переноса содержимого, так как это может быть проблемой при сопоставлении родительского элемента.
  2. Вызов метода takeToFront на экране
  3. Обтекание SurfaceView в FrameLayout (это относится к # 2, но все равно может помочь)
1 голос
/ 01 мая 2018

если вы установили для CalendarView видимость «VISIBLE» и в inflateView / OnCreateView после того, как нашли его с «findById», просто установили «GONE», и вы можете делать с ним все, что захотите.

calendarView = (CalendarView) view.findViewById (R.id.all_scores_calendar_view);calendarView.setVisibility (View.GONE);

calendarView.setVisibility (View.VISIBLE);

0 голосов
/ 04 марта 2014
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;
...