我在游戏中展示 Admob 横幅广告,但我注意到 AdView 不知何故弄乱了游戏手柄的输入。
例如,像X,A,L1,R1这样的按钮停止工作,它们不会触发onKeyDown
和onKeyUp
事件。其他按钮会生成不正确的键代码,例如,当按下 Y 时,而不是KEYCODE_BUTTON_Y
我收到KEYCODE_BUTTON_MENU
.
此问题发生在我触摸屏幕(而不是横幅本身)后。如果我不触摸屏幕,游戏手柄工作正常。
因此,AdView似乎正在"窃取"关键事件或类似的东西。
我尝试了不同的AdView设置,例如setFocusable(false)
,位置,尝试为其分配自定义KeyListener - 没有任何帮助。
我尝试了 2 种不同的游戏手柄和不同的安卓设备。
只有当我删除 AdView 或使其不可见时,此问题才会消失......
好的,似乎我找到了解决方案。如果我覆盖dispatchKeyEvent
并取消将 onKey 事件调度到 AdView,则游戏手柄工作正常。不确定这样做是否可以,但它有效。
public class MyAdView extends AdView {
public MyAdView(Activity activity, AdSize adSize, String adUnitId) {
super(activity, adSize, adUnitId);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return false;
}
}
这对我有用:
`// ADS
MobileAds.initialize(getApplicationContext(), getResources().getString(R.string.banner_ad_unit_id));
mAdView = (AdView) findViewById(R.id.adView);
adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
RelativeLayout fl = (RelativeLayout) findViewById(R.id.frameCounter);
fl.setFocusableInTouchMode(true);
fl.requestFocus();
}
});`
在 onAdLoaded 事件中,我已将焦点设置为我的布局和 voile!!