libGDX中Google Game Services弹窗如何显示?setViewForPopups调用后不显示
解决LibGDX中Google Play Games弹窗无法显示的问题
嘿,咱们来排查下你的问题——你代码里的核心问题在于:你创建了一个全新的空View,但这个View根本没被添加到Activity的视图层级里,Google Play Games的弹窗需要依附在一个已经挂载到界面上的可见容器才能正常显示。
具体修正方案:
替换空View为Activity的根视图
别再新建空View了,直接获取AndroidLauncher的根视图作为弹窗的依附容器。用下面的代码替换你原来的View view = new View(...)部分:// 获取Activity的根布局视图 View rootView = AndroidLauncher.this.getWindow().getDecorView().getRootView();或者也可以用
findViewById(android.R.id.content)来获取Activity的内容容器,效果是一样的。理解弹窗的依附逻辑
Google Play Games的弹窗必须绑定到一个已经存在于界面上的View,空View因为没有被添加到布局中,所以弹窗没有地方可以渲染。用根视图就能保证弹窗有正确的“锚点”,从而正常显示出来。
修正后的完整代码:
private void signInSilently() { mGoogleSignInClient.silentSignIn().addOnCompleteListener(this, new OnCompleteListener<GoogleSignInAccount>() { @Override public void onComplete(@NonNull Task<GoogleSignInAccount> task) { if (task.isSuccessful()) { GoogleSignInAccount signedInAccount = task.getResult(); GamesClient gamesClient = Games.getGamesClient(AndroidLauncher.this, signedInAccount); // 获取Activity的根视图作为弹窗载体 View rootView = AndroidLauncher.this.getWindow().getDecorView().getRootView(); gamesClient.setGravityForPopups(Gravity.TOP); gamesClient.setViewForPopups(rootView); onConnected(task.getResult()); Log.d(TAG, "signInSilently(): success"); } else { onDisconnected(); Log.d(TAG, "signInSilently(): failure", task.getException()); } } }); }
另外再提两个额外的检查点:
- 确保
GoogleSignInAccount是有效的,gamesClient初始化没有抛出异常 - 如果你的游戏是全屏模式(隐藏了状态栏/导航栏),可以暂时调整窗口属性,或者把弹窗绑定到游戏视图的父容器上,避免被游戏画面遮挡
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

