スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

未解決 AdMobをIMEの下に隠したら消えた?



AdMobをIMEの下に隠したら消えた?


超絶的に適当なレイアウトだと消えるようです。
正直どうでもいいんですけど気になって気になって…

また消えること自体も別にいいんです。



消えた事自体を取得できなくて困ってます。

とりあえずこんなレイアウトとソース

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:id="@+id/adLayout"
	android:orientation="vertical">

	<EditText android:id="@+id/editText1" android:text="test"
		android:layout_width="fill_parent" android:layout_height="wrap_content">
	</EditText>
	<Button android:text="Button" android:id="@+id/button1"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"></Button>

</LinearLayout>



ソース
	private WrapAdView		mAdView		= null;
	private AdRequest		mAdRequest	= null;

	private LinearLayout	mLayout		= null;
	private Button			mButton		= null;

	public void onCreate( Bundle savedInstanceState) {

		super.onCreate( savedInstanceState);
		setContentView( R.layout.main);

		mLayout = (LinearLayout) findViewById( R.id.adLayout);

		initAdmobMakeView();

		mButton = (Button) findViewById( R.id.button1);

		mButton.setOnClickListener( new OnClickListener() {

			public void onClick( View v) {

				// TODO 自動生成されたメソッド・スタブ
				initAdmobMakeView();
			}
		});
	}


	private void initAdmobMakeView() {

		if( mAdView == null){
			mAdView = new WrapAdView( this, AdSize.BANNER, "Publisher ID");
			mAdView.setAdListener( this);
			mLayout.addView( mAdView);
		}

		if( mAdRequest == null){
			mAdRequest = new AdRequest();
		}

		mAdRequest.addTestDevice( "hoge");
		mAdRequest.addTestDevice( AdRequest.TEST_EMULATOR);

		if( mAdRequest.isTestDevice( this)){
			Log.d( AdRequest.LOGTAG, "test");
			mAdView.loadAd( mAdRequest);
		}else{
			Log.d( AdRequest.LOGTAG, "not test");
		}
	}




うん、こんなレイアウトのアプリはありえないね。
というのは置いといて…

おもむろにEditTextに改行を加えていくとこうなります。

admob02.png

AdViewが消えます。

その時Logcatにはこんな表示が

Not enough space to show ad! Wants: <480, 75>, Has: <480, 69>


ああ、表示領域が足りなくなったんですね。そらしゃーない。

んじゃー、表示できる領域がまた出来れば復活しますよね~



戻りません…

まあ再度adLoad呼べばいいんですが、そのタイミングがわかんないですよね。

ってことで AdListener をインプリメントすれば何かわかるんじゃないかな~
と思い、こんな感じに修正


public class Test extends Activity implements AdListener {
	
	/*中略*/

	public void onDismissScreen( Ad arg0) {

		Log.d( AdRequest.LOGTAG, "onDismissScreen");

	}


	public void onFailedToReceiveAd( Ad arg0, ErrorCode arg1) {

		Log.d( AdRequest.LOGTAG, "onFailedToReceiveAd");

	}


	public void onLeaveApplication( Ad arg0) {

		Log.d( AdRequest.LOGTAG, "onLeaveApplication");

	}


	public void onPresentScreen( Ad arg0) {

		Log.d( AdRequest.LOGTAG, "onPresentScreen");

	}


	public void onReceiveAd( Ad arg0) {

		Log.d( AdRequest.LOGTAG, "onReceiveAd");

	}
}



とりあえず何か返ってくるだろってことで期待しました。

が、消えるタイミングでは何も来ない…





えー、じゃあAdView拡張してなんかそれっぽいやつ(名前だけで適当に判断)Overrideしてイベント収集とか??

/**
 * とりあえずイベント収集
 */
class WrapAdView extends AdView {

	public WrapAdView( Activity activity, AdSize adSize, String adUnitId) {

		super( activity, adSize, adUnitId);
	}


	@Override
	public boolean dispatchPopulateAccessibilityEvent( AccessibilityEvent event) {

		Log.d( AdRequest.LOGTAG, "dispatchPopulateAccessibilityEvent:" + event);
		return super.dispatchPopulateAccessibilityEvent( event);
	}


	@Override
	public void dispatchWindowVisibilityChanged( int visibility) {

		Log.d( AdRequest.LOGTAG, "dispatchWindowVisibilityChanged:" + visibility);
		super.dispatchWindowVisibilityChanged( visibility);
	}


	protected void dispatchVisibilityChanged( View changedView, int visibility) {

		super.dispatchVisibilityChanged( changedView, visibility);
		Log.d( AdRequest.LOGTAG, "visibility:" + visibility);
	}


	protected void onWindowVisibilityChanged( int visibility) {

		super.onWindowVisibilityChanged( visibility);

		switch( visibility) {
		case VISIBLE:
			Log.d( AdRequest.LOGTAG, "VISIBLE");
			break;
		case INVISIBLE:
			Log.d( AdRequest.LOGTAG, "INVISIBLE");
			break;
		case GONE:
			Log.d( AdRequest.LOGTAG, "GONE");
			break;
		}

	}


	protected void onVisibilityChanged( View changedView, int visibility) {

		super.onVisibilityChanged( changedView, visibility);

		switch( visibility) {
		case VISIBLE:
			Log.d( AdRequest.LOGTAG, "VISIBLE");
			break;
		case INVISIBLE:
			Log.d( AdRequest.LOGTAG, "INVISIBLE");
			break;
		case GONE:
			Log.d( AdRequest.LOGTAG, "GONE");
			break;
		default:
			Log.d( AdRequest.LOGTAG, "ERR:" + visibility);
		}
	}
}



結果何も取得できず!!
( ´∀`)Σ⊂(゚Д゚ ) なんでやねん!



ちなみにレイアウト側を弄るとそもそもIMEの下に隠れるとかなくなりますが…
でもなんか釈然としない。

あー、やっぱりレイアウトに関してもっと勉強せんと駄目なんだろうなぁ…


ま、別にたまたま気がついただけで逃げ方は幾らでもありそうですが、
必ずディスプレイの下側にAdViewを配置して、IME表示時は隠れるようにしたい!!
とかになったらどーすんだろ。

IMEの表示非表示とかどうにかしてどうにかなるのかな…と思ってググったらぽいのがありました。

http://y-anz-m.blogspot.com/2010/12/androidonscreen-input-methods.html


上記を参考にして上手いことゴニョゴニョすれば何とかなりそうですね。

結論:やっぱりレイアウトに関して勉強すれば幾らでも回避できそう

メデタシメデタシ…
なのかな?


例の警告発生時(消えた事自体)のイベント取得方法知っている方居ましたら教えてください。

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : admob android サンプルソース

プロフィール

駄猫

Author:駄猫

Twitter
その他
最新記事
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。