Dan*_*e B 3 android fragment admob android-linearlayout
我们在Android应用程序上使用AdMob已有4年以上。在最后几天,我们在未修改任何代码的情况下遇到了AdMob的问题。
从下图可以看出:
===
这是我们实现的描述:
我们将我们的横幅广告放在片段屏幕顶部的20%左右,放在LinearLayout“ banner_container”中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
....
<LinearLayout android:id="@+id/banner_container"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
....
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在Fragment的“ onCreateView”上,我们将横幅添加到容器中
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
adView = new AdView(getActivity());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
LinearLayout mBannerContainer = rootView.findViewById(R.id.banner_container);
mBannerContainer.setVisibility(View.VISIBLE);
mBannerContainer.addView(adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build();
adView.loadAd(adRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
===
我们如何回到加载时已经预留横幅空间的情况?
由于Admob不会在加载横幅广告之前保留横幅广告的高度,因此解决方案似乎是手动进行。
智能横幅广告是一种广告单元,可以在任意方向上跨不同设备在任何屏幕尺寸上呈现全屏横幅广告。智能横幅广告可以通过“智能”检测手机在当前方向上的宽度,并让广告查看该尺寸,从而有助于处理不同设备之间越来越大的屏幕碎片。
提供三种广告高度(以dp为单位,与密度无关):
32-当设备的屏幕高度小于400时使用50-当设备的屏幕高度在400到720之间时使用90-当设备的屏幕高度大于720时使用
解决方案1
您可以使用以下方法知道高度:
public static int getAdViewHeightInDP(Activity activity) {
int adHeight = 0;
int screenHeightInDP = getScreenHeightInDP(activity);
if (screenHeightInDP < 400)
adHeight = 32;
else if (screenHeightInDP >= 400 && screenHeightInDP <= 720)
adHeight = 50;
else
adHeight = 90;
return adHeight;
}
public static int getScreenHeightInDP(Activity activity) {
DisplayMetrics displayMetrics = ((Context) activity).getResources().getDisplayMetrics();
float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density;
return Math.round(screenHeightInDP);
}
Run Code Online (Sandbox Code Playgroud)
在“ banner_container”中删除:
android:visibility="gone"
Run Code Online (Sandbox Code Playgroud)
更改片段“ onCreateView”:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
adView = new AdView(getActivity());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
LinearLayout mBannerContainer = rootView.findViewById(R.id.banner_container);
mBannerContainer.setLayoutParams(
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
getAdViewHeightInDP(this.getActivity())
));
)
mBannerContainer.addView(adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build();
adView.loadAd(adRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
解决方案2
代替使用方法“ getAdViewHeightInDP”和“ getScreenHeightInDP”,使用方法“ AdSize.SMART_BANNER.getHeightInPixels(this)”。
在“ banner_container”中删除:
android:visibility="gone"
Run Code Online (Sandbox Code Playgroud)
更改片段“ onCreateView”:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
adView = new AdView(getActivity());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
LinearLayout mBannerContainer = rootView.findViewById(R.id.banner_container);
mBannerContainer.setLayoutParams(
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
AdSize.SMART_BANNER.getHeightInPixels(this.getActivity())
));
)
mBannerContainer.addView(adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build();
adView.loadAd(adRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |