Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在android上用javafx显示google adwords(AdView)吗_Java_Android_Javafxports_Gluon Mobile - Fatal编程技术网

我可以在android上用javafx显示google adwords(AdView)吗

我可以在android上用javafx显示google adwords(AdView)吗,java,android,javafxports,gluon-mobile,Java,Android,Javafxports,Gluon Mobile,我有一个在android上运行的javafx应用程序,我想在一些屏幕上放置google adwords。我的问题是adwords使用googles AdView来显示add,它是一个Android表示对象,与JavaFX表示层不兼容 创建AdView的示例代码 import com.google.android.gms.ads.MobileAds; import javafxports.android.FXActivity; import com.google.android.gms.ads

我有一个在android上运行的javafx应用程序,我想在一些屏幕上放置google adwords。我的问题是adwords使用googles AdView来显示add,它是一个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对象,可以演示了

我可以使用

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;
}

或者有其他解决方案吗?

通过从
FXActivity
访问
视图组,您可以轻松地在应用程序中包含
AdView

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

}

和往常一样回答得很好。谢谢@José很高兴能帮上忙。让我知道它是否适合你。在这种情况下,考虑接受答案,所以其他人也会发现它有用。