我有一个在Android上运行的javafx应用程序,并希望在某些屏幕上放置谷歌adwords。我遇到的问题是adwords使用谷歌AdView来显示添加,这是一个Android演示文稿对象,与JavaFX表示层不兼容。
创建AdView的示例代码
import com.google.android.gms.ads.MobileAds;
import javafxports.android.FXActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;
/**
* Constructor creates AdView
* Call getAdView() to retrieve AdView object.
*/
public class GoogleAds {
private AdView adView = null;
public GoogleAds() {
AdView mAdView = createAddView();
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // All emulators
.build();
mAdView.loadAd(adRequest);
}
...
现在我有一个准备好演示的com.google.android.gms.ads.AdView对象
我可以使用
将其添加到android视图层次结构中private void includeGoogleAdView(LinearLayout layout) {
AdView adView = GoogleAds().getAdView();
layout.addView(mAdView);
}
当作为Android应用程序运行时,所有这些都按预期工作。
所以问题是“我可以在javafx表示层中显示AdView吗?” 。
是否有办法让com.google.android.gms.ads.AdView成为javafx.scene.Node的实例然后我可以使用类似
的内容添加它private Node addToPane(AdView adView) {
javafx.scene.layout.Pane pane = new javafx.scene.layout.Pane();
pane.getChildren().addAll( canvas, adView);
return pane;
}
还是有另一种解决方案吗?
答案 0 :(得分:3)
您可以通过AdView
访问ViewGroup
,轻松在应用中添加FXActivity
。
这是一个适合我的代码段。请注意,它必须在UIThread中运行:
public AndroidAds() {
FXActivity.getInstance().runOnUiThread(() -> {
LinearLayout layout = new LinearLayout(FXActivity.getInstance());
layout.setVerticalGravity(Gravity.BOTTOM);
layout.setOrientation(LinearLayout.VERTICAL);
AdView adView = new AdView(FXActivity.getInstance());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXXXXXXXX");
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("XXXXXXXXXXXXXXXXXXXX")
.build();
adView.loadAd(adRequest);
adView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
System.out.println("AD loaded");
}
});
layout.addView(adView);
FXActivity.getViewGroup().addView(layout);
});
}