有没有办法将admob广告添加到PreferenceActivity?怎么样?
答案 0 :(得分:29)
您还可以创建一个可以轻松添加到任何首选项屏幕的自定义首选项。
将名为ad_layout.xml的布局文件添加到您的res / layout文件夹中,稍后由AdMob填充。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical">
</LinearLayout>
创建一个名为AdPreference的类:
package com.example.adpreference;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import android.app.Activity;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
public class AdPreference extends Preference {
public AdPreference(Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);}
public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);}
public AdPreference(Context context) {super(context);}
@Override
protected View onCreateView(ViewGroup parent) {
// this will create the linear layout defined in ads_layout.xml
View view = super.onCreateView(parent);
// the context is a PreferenceActivity
Activity activity = (Activity)getContext();
// Create the adView
AdView adView = new AdView(activity, AdSize.BANNER, "<your add id>");
((LinearLayout)view).addView(adView);
// Initiate a generic request to load it with an ad
AdRequest request = new AdRequest();
adView.loadAd(request);
return view;
}
}
现在,在首选项xml文件中,您可以添加添加任何您喜欢的位置(在顶部或任何其他首选项之间)。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
...
<com.example.adpreference.AdPreference android:layout="@layout/ad_layout"/>
...
</PreferenceScreen>
答案 1 :(得分:15)
是的,PreferenceActivity
只是ListActivity
的子类,与ListActivity
一样,您可以指定自己的自定义布局,只要它包含ListView
ID为android.R.id.list
的ID。因此,创建包含ListView
和AdView
所需的任何XML布局文件,并将该布局用于PreferenceActivity
。
答案 2 :(得分:14)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res/com.xxxx" android:layout_height="fill_parent"
android:layout_width="fill_parent">
<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
<com.admob.android.ads.AdView
android:id="@+id/ad"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
myapp:backgroundColor="#000000"
myapp:primaryTextColor="#FFFFFF"
myapp:secondaryTextColor="#CCCCCC"/>
</RelativeLayout>
在扩展PreferenceActivity的Activity中,您可以在onCreate方法中编写类似的内容;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.config);
}
答案 3 :(得分:2)
ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.list).getParent().getParent().getParent();
viewGroup.addView(new AdView(...));
答案 4 :(得分:2)
P.Melch 答案有一些变化 Adpreference类如下(因为它不适用于最新的Google Play广告库):
public class AdPreference extends Preference {
public AdPreference(Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);}
public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);}
public AdPreference(Context context) {super(context);}
@Override
protected View onCreateView(ViewGroup parent) {
// this will create the linear layout defined in ads_layout.xml
View view = super.onCreateView(parent);
// the context is a PreferenceActivity
Activity activity = (Activity)getContext();
AdView adView = new AdView(getContext());
adView.setAdUnitId("<your ad id>");
adView.setAdSize(AdSize.BANNER);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
((LinearLayout)view).addView(adView);
return view;
}
}
答案 5 :(得分:1)
您只需要为广告制作一个单独的布局,然后将其作为 @app.after_request
def add_header(response):
response.headers['X-Content-Type-Options'] = 'nosniff'
return response
添加到 preference_screen.xml
。
您可以在所附的图像layout
答案 6 :(得分:0)
我实现了建议的方法,但是在将横幅放在顶部以及填充问题时遇到了问题。因此,我使用了另一种方法,并希望与您分享。我正在进行偏好活动,尽管它已被弃用,但出于某种原因我不得不进行它,而不是更改为androidx偏好库。
以下是以下步骤:
获取偏好活动的父项。
LinearLayout root = (LinearLayout)
findViewById(android.R.id.list).getParent().getParent().getParent();
创建一个名为banner_ad.xml的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/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView
android:id="@+id/adview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/banner_id" />
</LinearLayout>
为布局增加空间。
LinearLayout adViewLayout = (LinearLayout)
LayoutInflater.from(this).inflate(R.layout.banner_ad,root,false);
AdView adView = adViewLayout.findViewById(R.id.adview);
加载添加。
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(device_id)
.build();
adView.loadAd(adRequest);
将布局视图添加为根视图的子视图。就我而言,我在索引1处的工具栏下面使用了它。
root.addView(adViewLayout,1);