3

ユーザーが画面に到達したときに、Libgdx で AdMob の向きを変更しようとしました。画面の一番下に配置したい。ハンドラーを作成し、適切な画面に実装してから、メソッドを呼び出します。

myHandler.moveAds(true);

私のインターフェースは次のようになります。

public interface IActivityRequestHandler {
    public void showAds(boolean show);
    public void moveAds(boolean move);
}

Android プロジェクト ファイルは次のようになります。

public class MyAndroidnewActivity extends AndroidApplication implements IActivityRequestHandler {
     protected AdView adView;
     RelativeLayout.LayoutParams adParams;

     private final int SHOW_ADS = 1;
     private final int HIDE_ADS = 0;
     private final int MOVE_ADS = 1;
     private final int PLACE_ADS = 0;

     protected Handler handler = new Handler()
     {
         @Override
         public void handleMessage(Message msg) {
             switch(msg.what) {
                 case SHOW_ADS:
                 {
                     adView.setVisibility(View.VISIBLE);
                     break;
                 }
                 case HIDE_ADS:
                 {
                     adView.setVisibility(View.GONE);
                     break;
                 }
             }
         }
     };

     protected Handler moveHandler = new Handler()
     {
         @Override
         public void handleMessage(Message msg) {
             switch(msg.what) {
                 case MOVE_ADS:
                 {
                    //In my opinion this code is not good, because It doesn't do anything 
                    //when I call the myHandler.moveAds(true); in an another class      
                    adView.setGravity(Gravity.BOTTOM);
                     break;
                 }
                 case PLACE_ADS:
                 {
                    adView.setGravity(Gravity.TOP);
                     break;
                 }
             }
         }
     };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = false;
        cfg.useAccelerometer = false;
        cfg.useCompass = false;


            // Create the layout
            RelativeLayout layout = new RelativeLayout(this);

            // Do the stuff that initialize() would do for you
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

            // Create the libgdx View
            View gameView = initializeForView(new MyApp(this), false);

            // Create and setup the AdMob view
            adView = new AdView(this, AdSize.BANNER, "MYOWNKEY"); // Put in your secret key here
            AdRequest re = new AdRequest();
            re.addTestDevice("MYOWNDEVICECODE");
            adView.loadAd(re);

            // Add the libgdx view
            layout.addView(gameView);

            // Add the AdMob view
            adParams = 
                    new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            adParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

            layout.addView(adView, adParams);

            // Hook it all up
            setContentView(layout);
        }


        @Override
        public void showAds(boolean show) {
           handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS);
        }

        @Override
        public void moveAds(boolean move) {
           moveHandler.sendEmptyMessage(move ? MOVE_ADS : PLACE_ADS);
        }
    }

しかし、myHandler.moveAds(true); を呼び出すと、メソッドを別のクラスで実行すると、何も実行されず、エラーも発生せず、広告は (横向き) 画面の上部に表示され、下部には表示されません。

私の意見では、私に問題がある

  protected Handler moveHandler = new Handler()
     {
         @Override
         public void handleMessage(Message msg) {
             switch(msg.what) {
                 case MOVE_ADS:
                 {
                    //In my opinion this code is not good, because It doesn't do anything 
                    //when I call the myHandler.moveAds(true); in an another class      
                    adView.setGravity(Gravity.BOTTOM);
                     break;
                 }
                 case PLACE_ADS:
                 {
                    adView.setGravity(Gravity.TOP);
                     break;
                 }
             }
         }
     };

コード。別の方法で方向を制御する必要があるかもしれませんが、方法がわかりません。助けてくれてありがとう!

4

1 に答える 1

3

このsetGravity()メソッドは、AdViewをコンテナー内のどこに配置するかではなく、AdView内のどこにコンテンツ(この場合は広告)を配置するかを決定します。

コンテナはRelativeLayoutのように見えるので、重力を設定する代わりに、新しいLayoutParamsを設定できるはずです。

RelativeLayout.LayoutParams adParams =
    new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                                    RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); // or RelativeLayout.ALIGN_PARENT_TOP
adView.setLayoutParams(adParams);
于 2012-07-12T22:46:29.813 に答える