3

サブクラスのAndEngineゲームがあります

public class BaseActivity extends SimpleBaseGameActivity {

}

ゲームは正常に動作し、Admob ビューを追加しようとすると、SO のポスターから onSetContentView() メソッドをオーバーライドすることを学びました。

私はこれが好きです:

@Override
protected void onSetContentView() {

    //Creating the parent frame layout:
    final FrameLayout frameLayout = new FrameLayout(this);

    //Creating its layout params, making it fill the screen.
    final FrameLayout.LayoutParams frameLayoutLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT);

    //Creating the banner view.
    AdView adView = new AdView(this, AdSize.BANNER, AdMobPubId);

    // Initiate a generic request to load it with an ad
    adView.loadAd(new AdRequest());

    // set the layout properties
    final FrameLayout.LayoutParams adViewLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL);


    // Creating AndEngine's view - Reference made
    this.mRenderSurfaceView = new RenderSurfaceView(this);
    mRenderSurfaceView.setRenderer(mEngine, null);


    //createSurfaceViewLayoutParams is an AndEngine method for creating the params for its view.
    final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams = new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

    //Adding the views to the frame layout.
    frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
    frameLayout.addView(adView, adViewLayoutParams);

    //Setting content view
    this.setContentView(frameLayout, frameLayoutLayoutParams);
}

広告は読み込まれますが、画面は真っ暗です。私のゲームはなくなりました。画面はまだタッチを登録します(デバッガーで確認できるように)

下の図にエンジンが表示されていないのはなぜですか?!?!

編集:ついに機能しました

このコードを使用すると、突然機能しましたが、以前は機能しなかった理由がわかりません

@Override
    protected void onSetContentView() {
        this.mRenderSurfaceView = new RenderSurfaceView(this);
        this.mRenderSurfaceView.setRenderer(this.mEngine, this);
        final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams = new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());

        //Creating the banner view.
        AdView adView = new AdView(this, AdSize.BANNER, AdMobPubId);
        adView.loadAd(new AdRequest());
        final FrameLayout.LayoutParams adViewLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_HORIZONTAL);


        final FrameLayout frameLayout = new FrameLayout(this);
        final FrameLayout.LayoutParams frameLayoutLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT);

        frameLayout.addView(this.mRenderSurfaceView,surfaceViewLayoutParams);
        frameLayout.addView(adView,adViewLayoutParams);
        this.setContentView(frameLayout, frameLayoutLayoutParams);

    }
4

2 に答える 2

3

膨らませた後にレイアウトを変更するため、機能しません。setContentViewレイアウトを呼び出してインフレートした後は、ビューを追加できません。

AdViewAndEngine が呼び出す前に、以前に作成してレイアウトに追加するだけsetContentViewです。その例をここで見ることができます。

私はFrameLayoutこの例で使用しています。これは、最もうまく機能する私のゲームから取得しFrameLayoutたものです。メソッドonSetContentViewはより単純になります。必要なのは、RenderSurfaceViewオブジェクトとオブジェクトをインスタンス化AdViewしてから、それらを new に追加して をLinearLayout呼び出すことだけsetContentViewです。

于 2012-11-05T14:42:14.833 に答える
1

私はあなたがこれを行うことができるとは思わない

LinearLayout layout = (LinearLayout)findViewById(R.id.game_rendersurfaceview);

R.id.game_rendersurfaceviewとして宣言されているためorg.anddev.andengine.opengl.view.RenderSurfaceView

それらはリンゴ/リンゴではありません。

個人的には、XML のメインの LinearLayout に別のフィールドを追加して、adView を保持します。


広告を使用してから数年経っているので、具体的には言えません。XML で adView を宣言する例を見つけることができるはずです。このようなものになります

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">

        <org.anddev.andengine.opengl.view.RenderSurfaceView android:id="@+id/game_rendersurfaceview"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:layout_gravity="center" />

    <adView decalaration here
android:id="@+id/game_adview" />
    </LinearLayout>

必ず を指定してからid、コードでその ID を使用してください

adView layout = (adView)findViewById(R.id.game_adview);
于 2012-11-05T12:01:07.463 に答える