よく無料アプリとかDLすると、中央下にAdMobとかが表示されてます。
こういう配置はXMLからレイアウトでも設置できるけど、少し面倒くさいんですよね。
▼ あと次みたいな場合だとXMLを使えない場面も
- 動的に広告設置したい場合
- コード側から広告表示したい場合
簡単そうだけど、やるとなると色々知識不足でジタバタしてしまいました。
そこで、レイアウトなしでバナー広告を Activity中央下 に表示する方法 をメモしときます。
失敗例 : 初めにAdMobバナー表示で試してみたこと
Android開発は久しぶりなので色々忘れてます。
もういろいろ変わりすぎてて浦島太郎状態みたいな感じ
Android10になったり、お菓子のコード名をやめたり・・・
なのでネット上の情報を頼りに試行錯誤して試してみました。
まず初めに試したのは次みたいなコード( onCreate に記述)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/// 表示したい広告ビュー adView = new AdView(this); adView.setAdSize(AdSize.BANNER); adView.setAdUnitId(AD_UNIT_ID_BANNER); /// Linear Layout を追加して、そこにねじ込む int WC = LinearLayout.LayoutParams.WRAP_CONTENT; LinearLayout layout = new LinearLayout( this ); layout.setOrientation( LinearLayout.VERTICAL ); layout.setGravity( Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL ); addContentView( layout, new LinearLayout.LayoutParams(WC, WC) ); layout.addView( adView, new LinearLayout.LayoutParams(WC, WC) ); /// AdMob広告をロード AdRequest request = new AdRequest.Builder() .addTestDevice(AdRequest.TEST_EMULATOR); adView.loadAd(request); |
一応これでも表示できます。でもなぜか広告が画面中央に・・・
▼ こんなアプリ公開したらリジェクト不可避
しかも広告以外のとこをタッチしても広告に飛んでしまう
仮にアプリ公開してたら、低評価1ばかりついて速攻でアプリ削除されるレベルです。
成功例 : FrameLayoutを使ったら上手くいった
それでいろいろ試した結果、、、、、
FrameLayout を使う方法が一番確実だと判明
コッチを使うとほぼ確実に中央下に表示できるはずです。(ただしレイアウトにもよる)
具体的には次みたいなコードです。
▼ 実際の広告表示コード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/// 表示したい広告ビュー adView = new AdView(this); adView.setAdSize(AdSize.BANNER); adView.setAdUnitId(AD_UNIT_ID_BANNER); /// FrameLayoutを使って真下に広告表示 DisplayMetrics metrics = getResources().getDisplayMetrics(); FrameLayout.LayoutParams adLayoutParams = new FrameLayout.LayoutParams( (int) (320 * metrics.density), (int) (50 * metrics.density) ); adLayoutParams.gravity = (Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); FrameLayout frameLayout = new FrameLayout(this); frameLayout.addView(adView, adLayoutParams); frameLayout.setBackgroundColor(Color.TRANSPARENT); frameLayout.setForegroundGravity(Gravity.BOTTOM | Gravity.CENTER); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, (int) (50 * metrics.density)); layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER; addContentView(frameLayout, layoutParams); /// バナー広告を読み込み AdRequest request = new AdRequest.Builder() .addTestDevice(AdRequest.TEST_EMULATOR); adView.loadAd(request); |
このコードのポイントは次の2つ
- FrameLayout.LayoutParamsを使うこと
この gravity に対し、 Gravity.BOTTOM | Gravity.CENTER を指定することで中央真下の表示になる
- 高さを明示的に指定してること
この例ではバナー(320x50)を表示したかったので、高さに dpi をかけていい具合に調整
こうすると予想通りに中央真下に表示できました!
▼ これでアプリ公開してもリジェクトされなさそう・・・
あと広告以外の所を押したら広告ページに飛ぶような、詐欺アプリみたいな仕様も消えてます。
この件で思い出したのは、やっぱり「アプリ開発って楽しいけど大変」 ということ
昔やってたとはいえ、しばらくやめてると色々忘れてますね。
これからこのブログでも忘れないようにメモし続けたいと思います。
ということで、ではではまた (^_^)/~