Android開発をしていて、AdMobのバナーを表示しているActivityでキーボード入力をしようとすると重くなる事象が発生.
その解決法をメモ代わりに残します.
結論(解決法)
AndroidManifest.xml のAdMobを利用しているActivityに以下の属性を追加する.
1 |
android:windowSoftInputMode="adjustPan" |
属性追加後のActivityはこんな感じです.
1 2 3 4 5 6 7 |
<activity android:name=".MainActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustPan" > <!--いろいろな定義--> </activity> |
adjustPanだけでなく、adjustResizeでも解決できるはずなので、Activityの実装・レイアウトに応じて使い分けを行ってください.
公式ドキュメントではadjustResizeの方が望ましいと書いてありますが、個人的にはレイアウトが崩れないadjustPanの方が好みです.
解決方法を見つけるまでの流れ
Activityのテキストエリアに値を入れようとフォーカスを当てると、キーボードが表示される.
キーボードをタッチしても値が入っていないように見えたが、テキストエリアからフォーカスを外す(キーボードを隠す)と値が入っていることが確認できた.
Logcatを見ると以下のエラーが大量に出ていることを確認.
1 2 3 |
01-02 09:19:59.007 7206-7206/? W/Ads﹕ Not enough space to show ad. Needs 319x49 dp, but only has 319x45 dp. 01-02 09:19:59.047 7206-7206/? W/Ads﹕ Not enough space to show ad. Needs 319x49 dp, but only has 319x45 dp. 01-02 09:19:59.077 7206-7206/? W/Ads﹕ Not enough space to show ad. Needs 319x49 dp, but only has 319x45 dp. |
これはAdMobが出しているエラーであり、かつキーボードを表示したとたんにこのログが出ることを確認できた.
この事実から、以下のように推測.
キーボード表示 → 広告表示用のエリアが見えなくなる → 何度も表示を試そうとして、大量にエラーがでる → 処理が重くなる → キーボードの入力がリアルタイムで反映されなくなる
キーボード表示側に問題があると考え、いろいろ試した結果、結論の解決法にたどり着きました.