全画面を占める表面が見えます。ボタンをクリックするだけで、別のレイアウトを表示したい(設定の種類)。オーバーレイが表示されている状態で開始すると、オーバーレイを非表示にしてから、問題なく再び表示できます。しかし、私がそれを目に見えないものから始めた場合、それを二度と目に見えるようにすることはできません。コードは次のとおりです。
<?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);
}
}
};
とった。レイアウトだけでなく、レイアウト内のすべてのアイテムの可視性を設定する必要があります。したがって、このコードは機能しました:
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);
}
同様のエラーがありましたが、UiThreadを使用しないという私の愚かな間違いが原因でした。
Activity act = (Activity)context;
act.runOnUiThread(new Runnable(){
@Override
public void run() {
mLayoutLights.setVisibility(View.VISIBLE);
} });
私の場合、プレーンなSurfaceViewを使用して、ビューをINVISIBLEではなくxmlでGONEに設定するだけです。その後、VISIBILITYを正しく設定できます。
3つの独立したものを試すことをお勧めします。
calendarViewを可視性 "VISIBLE"に設定し、 "findById"で見つけた後にinflateView/OnCreateViewで "GONE"に設定すれば、それを使って好きなことができます。
calendarView =(CalendarView)view.findViewById(R.id.all_scores_calendar_view); calendarView.setVisibility(View.GONE);
calendarView.setVisibility(View.VISIBLE);
私は同じ問題に直面し、デバッグログは可視性が正しく設定されていることを明確に示していました。
私はデータバインディングを使用していました。私にとっては、以下の解決策がうまくいきました。
_activity.runOnUiThread(() -> binding.getRoot().post(() -> {
binding.additionalDataHolderOne.setVisibility(View.GONE);
binding.firstStreamHolder.setVisibility(View.VISIBLE);
}));
_
実際、binding.getRoot().post(() -> {});
が仕事をしました。
(私にとっても)動作しない理由はありませんが、回避策として次のことができます。
val params = mLayoutLights.layoutParams
if (shoouldShow()) {
params.height = WRAP_CONTENT
} else {
params.height = 0
}
mLayoutLights.layoutParams = params