【问题标题】:Can I display google adwords (AdView) in javafx on android我可以在 android 上的 javafx 中显示 google adwords (AdView)
【发布时间】:2016-08-20 09:33:56
【问题描述】:

我有一个在 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;
}

或者有其他解决方案吗?

【问题讨论】:

    标签: java android javafxports gluon-mobile


    【解决方案1】:

    通过从FXActivity 访问ViewGroup,您可以轻松地在您的应用中包含AdView

    这是一个适合我的代码 sn-p。注意它必须在 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é
    • 很高兴能提供任何帮助。请让我知道这对你有没有用。在这种情况下,请考虑接受答案,以便其他人也能发现它有用。
    • iOS 版怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多