PreferenceActivityを使った設定画面に、AdMobの広告を追加します。表示の方法は2パターンです。

パターン1(設定項目の最後尾に追加)

f:id:Sirokoix:20101121181734p:image

一番下までスクロールすると設定項目の一つとして、広告が見えてくるようになります。まず、広告の入った設定項目を作ります。それをpreference.xmlで読み込みます。

admob_preference.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/sample"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="50px">
<com.admob.android.ads.AdView
android:id="@+id/ad"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
myapp:backgroundColor="#000000"
myapp:primaryTextColor="#FFFFFF"
myapp:secondaryTextColor="#CCCCCC" />
</LinearLayout>

preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="title">
<Preference 
android:selectable="false"
android:layout="@layout/admob_preference" />
</PreferenceCategory>
</PreferenceScreen>

パターン2(画面の最下部に表示)

f:id:Sirokoix:20101121182139p:image

こちらは、addContentViewを使用してレイアウトを被せる方法です。常に画面の下部に広告が表示されます。普通にやると、広告と最後の設定項目が被ってしまいます。そのため、最後の設定項目には広告の縦幅分のダミーを入れます。

dummy_preference.xml

<?xml version="1.0" encoding="utf-8"?>
<View
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/sample"
android:id="@+id/aaaid"
android:layout_width="fill_parent"
android:layout_height="50dp"/>

preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="title">
<Preference
android:key="key"
android:title="title0" />
</PreferenceCategory>
<Preference 
android:selectable="false"
android:layout="@layout/dummy_preference" />
</PreferenceScreen>

MyActivity.java
[java]
public class MyActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
AdView adView = new AdView(this);
adView.setVisibility(android.view.View.VISIBLE);
adView.requestFreshAd();
LayoutParams adLayoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
adView.setLayoutParams(adLayoutParams);
LinearLayout linearlayout = new LinearLayout(this);
linearlayout.addView(adView);
linearlayout.setGravity(Gravity.BOTTOM);
LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
addContentView(linearlayout, layoutParams);
}
}
[/java]