2

我有一个在 android 上运行的 javafx 应用程序,并且想在某些屏幕上放置 google adwords。我遇到的问题是,adwords 使用 googles 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 应用程序运行时,所有这些都按预期工作。

所以问题是“我可以让 AdView 在 javafx 表示层中显示吗?” .

有没有办法让 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;
}

还是有其他解决方案?

4

1 回答 1

3

您可以AdView通过ViewGroupFXActivity.

这是一个适合我的代码片段。注意它必须在 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);
    });

}

于 2016-08-21T12:36:19.267 回答