我创建了一个包含两个 View 的 View 。一旦 View 为等候室 (A) 和第二 View (B),就可以接听电话。
调用到达 View A 后,将调用第二个 View (B)。有用。如果用户完成了交互,他应该返回到 View (A)。不幸的是,这不起作用。
这是调用 View B 的代码。这很好用。
// Add view to content
OVSLobbyActivity.this.rootWaitingRoom.view.setVisibility(View.GONE);
OVSLobbyActivity.this.root.removeChild(OVSLobbyActivity.this.rootWaitingRoom);
OVSLobbyActivity.this.root.appendChild(OVSLobbyActivity.this.rootCallRoom);
OVSLobbyActivity.this.rootCallRoom.view.setVisibility(View.VISIBLE);
// Set fullscreen
OVSLobbyActivity.this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
OVSLobbyActivity.this.onWindowFocusChanged(true);
// force to change the layout
root.view.invalidate();
root.view.requestLayout();
下面是隐藏 View B 并再次显示 View A 的代码。这效果不太好。这是只显示白色页面的问题。 Activity 内的元素丢失。
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
this.onWindowFocusChanged(false);
this.rootCallRoom.view.setVisibility(View.GONE);
this.root.removeChild(OVSLobbyActivity.this.rootCallRoom);
this.root.appendChild(OVSLobbyActivity.this.rootWaitingRoom);
this.rootWaitingRoom.view.setVisibility(View.VISIBLE);
// force to change the layout
root.view.invalidate();
root.view.forceLayout();
root.view.requestLayout();
你知道出了什么问题吗? 感谢您的帮助。
最佳答案
解决方案是必须重新计算 View 的大小。重新计算度量后,您必须执行以下行:
this.view.requestLayout ();
之后将显示正确的 View 。
关于java - 删除 View 的子级然后读取它后, View 将无法正常显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55459733/