android 中的 Admob SMART_BANNER 在横向模式下无法正常工作
Admob SMART_BANNER in android is not working when orientation is in Landscape mode
我在 android 应用程序中使用 Admob SMART_BANNER。该应用程序在设备处于纵向模式时显示。但是,如果设备方向处于横向模式,则不会显示添加。我知道如果没有足够的 space 来显示添加,则不会显示横幅添加。但在我的例子中,它似乎有足够的 space 来显示一个添加。这是我的代码:
activity_main.xml 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
</RelativeLayout>
strings.xml 值文件夹中的文件:
<resources>
<string name="app_name">Banner Example</string>
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
</resources>
Java代码:
TelephonyManager tManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder`enter code here`()
.addTestDevice(uid)
.build();
mAdView.loadAd(adRequest);
try this below code
private void showBannerAd()
{
AdView adView = new AdView(HomeActivity.this);
//cal method to show banner add
if(getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE)
{
adView.setAdSize(AdSize.BANNER);
}
else
{
adView.setAdSize(AdSize.SMART_BANNER);
}
adView.setAdUnitId("AD_ID");
AdRequest adRequest = new
AdRequest.Builder().addTestDevice(Secure.getString(getContentResolver()
,Secure.ANDROID_ID)).build();
adView.loadAd(adRequest);
}
您可以根据设备的屏幕分辨率动态加载广告尺寸:
AdSize adSize = AdSize.SMART_BANNER;
DisplayMetrics dm = getResources().getDisplayMetrics();
double density = dm.density * 160;
double x = Math.pow(dm.widthPixels / density, 2);
double y = Math.pow(dm.heightPixels / density, 2);
double screenInches = Math.sqrt(x + y);
if (screenInches > 8) { // > 728 X 90
adSize = AdSize.LEADERBOARD;
} else if (screenInches > 6) { // > 468 X 60
adSize = AdSize.MEDIUM_RECTANGLE;
} else { // > 320 X 50
adSize = AdSize.BANNER;
}
AdView mAdView = (AdView) findViewById(R.id.adView);
mAdView.setAdUnitId(yourAdUnitHere);
mAdView.setAdSize(adSize);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
这可能不适用于原始问题,但我想分享我对 SMART_BANNER 不起作用的情况的解决方案。
我发现在我的例子中 SMART_BANNER 想要占据屏幕的 整个宽度 而不管方向是横向还是纵向。我把 AdView 放在底部。如果它位于占屏幕宽度 80% 的列中,则它既不会显示也不会抱怨(即不调用 onAdFailedToLoad)。它只是隐藏起来。占据整个宽度后,广告将毫无问题地展示。
我在 android 应用程序中使用 Admob SMART_BANNER。该应用程序在设备处于纵向模式时显示。但是,如果设备方向处于横向模式,则不会显示添加。我知道如果没有足够的 space 来显示添加,则不会显示横幅添加。但在我的例子中,它似乎有足够的 space 来显示一个添加。这是我的代码:
activity_main.xml 文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
</RelativeLayout>
strings.xml 值文件夹中的文件:
<resources>
<string name="app_name">Banner Example</string>
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
</resources>
Java代码:
TelephonyManager tManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder`enter code here`()
.addTestDevice(uid)
.build();
mAdView.loadAd(adRequest);
try this below code
private void showBannerAd()
{
AdView adView = new AdView(HomeActivity.this);
//cal method to show banner add
if(getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE)
{
adView.setAdSize(AdSize.BANNER);
}
else
{
adView.setAdSize(AdSize.SMART_BANNER);
}
adView.setAdUnitId("AD_ID");
AdRequest adRequest = new
AdRequest.Builder().addTestDevice(Secure.getString(getContentResolver()
,Secure.ANDROID_ID)).build();
adView.loadAd(adRequest);
}
您可以根据设备的屏幕分辨率动态加载广告尺寸:
AdSize adSize = AdSize.SMART_BANNER;
DisplayMetrics dm = getResources().getDisplayMetrics();
double density = dm.density * 160;
double x = Math.pow(dm.widthPixels / density, 2);
double y = Math.pow(dm.heightPixels / density, 2);
double screenInches = Math.sqrt(x + y);
if (screenInches > 8) { // > 728 X 90
adSize = AdSize.LEADERBOARD;
} else if (screenInches > 6) { // > 468 X 60
adSize = AdSize.MEDIUM_RECTANGLE;
} else { // > 320 X 50
adSize = AdSize.BANNER;
}
AdView mAdView = (AdView) findViewById(R.id.adView);
mAdView.setAdUnitId(yourAdUnitHere);
mAdView.setAdSize(adSize);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
这可能不适用于原始问题,但我想分享我对 SMART_BANNER 不起作用的情况的解决方案。
我发现在我的例子中 SMART_BANNER 想要占据屏幕的 整个宽度 而不管方向是横向还是纵向。我把 AdView 放在底部。如果它位于占屏幕宽度 80% 的列中,则它既不会显示也不会抱怨(即不调用 onAdFailedToLoad)。它只是隐藏起来。占据整个宽度后,广告将毫无问题地展示。