방향 화면을 변경할 때 발생하는 문제에 직면했습니다. smart_banner가 새로 고침되지 않습니다.Adview 크기 방향을 변경할 때 Smart_Banner가 깨졌습니다.
내가 검색하면 smart_banner가 자동으로 배너의 크기를 새로 고쳐야하지만, 그렇지 않으면 그 이유를 알 수 없습니다.
편집 :
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Remove the ad keeping the attributes
AdView ad = (AdView) findViewById(R.id.ad_view_home);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) (ad != null ? ad.getLayoutParams() : null);
RelativeLayout parentLayout = (RelativeLayout) (ad != null ? ad.getParent() : null);
if (parentLayout != null) {
parentLayout.removeView(ad);
}
// Re-initialise the ad
mAdView.destroy();
mAdView = new AdView(this);
mAdView.setAdSize(com.google.android.gms.ads.AdSize.SMART_BANNER);
mAdView.setAdUnitId(getString(R.string.banner_ad_unit_id_home));
mAdView.setId(R.id.ad_view_home);
mAdView.setLayoutParams(lp);
if (parentLayout != null) {
parentLayout.addView(mAdView);
}
// Re-fetch add and check successful load
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice(getString(R.string.device_id_test1))
.build();
mAdView.loadAd(adRequest);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Utils.setLayoutVisible(mAdView);
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Utils.setLayoutInvisible(mAdView);
}
});
}
의 AndroidManifest.xml : 난 그냥 제거 다시 바인드와의 onConfigurationChanged()에 코드를 통해 내 AdView가 다시 추가
인한 문제를 어떻게 해결
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
나는 XML에 설정 AdView가 있어요 :
acitivy에서,이 같은 I 설정 : 여기
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
activateToolbarWithNavigationView(HomeActivity.this);
//Ad Config
// Initialize the Mobile Ads SDK.
MobileAds.initialize(this, getString(R.string.application_id_ad));
// Gets the ad view defined in layout/ad_fragment.xml with ad unit ID set in
// values/strings.xml.
mAdView = (AdView) findViewById(R.id.ad_view_home);
// Create an ad request. Check your logcat output for the hashed device ID to
// get test ads on a physical device. e.g.
// "Use AdRequest.Builder.addTestDevice("ABCDEF") to get test ads on this device."
mAdRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice(getString(R.string.device_id_test1))
.build();
// Start loading the ad in the background.
mAdView.loadAd(mAdRequest);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Utils.setLayoutVisible(mAdView);
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Utils.setLayoutInvisible(mAdView);
}
});
// Tabs Setup
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
final ViewPager viewPager = (ViewPager) findViewById(R.id.home_pager);
if (tabLayout != null) {
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.favorites_label_fragment)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.air_today_label_fragment)));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final HomePageAdapter adapter = new HomePageAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
if (viewPager != null) {
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_home_settings, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_refresh) {
return false;
}
return true;
}
그리고 내 Gradle을 경우 : AdView가 크기가 변경되지 않습니다
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "br.com.adley.myseriesproject"
minSdkVersion 17
targetSdkVersion 23
versionCode 7
versionName "Beta 5.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'org.ini4j:ini4j:0.5.4'
compile 'jp.wasabeef:picasso-transformations:2.1.0'
compile 'com.google.firebase:firebase-core:9.0.0'
compile 'com.google.firebase:firebase-ads:9.0.0'
// http://mvnrepository.com/artifact/com.balysv/material-ripple
compile group: 'com.balysv', name: 'material-ripple', version: '1.0.2'
}
apply plugin: 'com.google.gms.google-services'
당신이 호출 adView.resume()와 활동에 adView.pause() 메소드나요? –
예, 질문을 업데이트했습니다. – Adley
super.onPause() 및 mAdView.pause() 순서를 바꾸고 항상 super 메서드를 먼저 호출하십시오. –