2016-08-19 6 views
1

방향 화면을 변경할 때 발생하는 문제에 직면했습니다. 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' 
+0

당신이 호출 adView.resume()와 활동에 adView.pause() 메소드나요? –

+0

예, 질문을 업데이트했습니다. – Adley

+0

super.onPause() 및 mAdView.pause() 순서를 바꾸고 항상 super 메서드를 먼저 호출하십시오. –

답변

2

하지만 SMART_BANNER와 전체에 대한 여전히 폭이 너무 넓어서 새로운 방향으로 광고가 나오지 않으므로 적합하지 않습니다.이 경우 AdView를 재 작성하면 XML을 사용하는 것보다 코드에서 더 쉽게 할 수 있습니다. 이 도움이

Admob ad not resizing correctly upon screen orientation [Includes Pictures]

희망 ..

+0

코드를 통해이 작업을 수행하려했으나 하단 및 높이 및 너비 정렬과 같은 매개 변수 관련 문제가 있었지만 몇 가지 답변을 섞어 보면 효과가있었습니다! 내 질문을 편집하여 올바른 솔루션을 게시하고 올바른 것으로 표시하십시오. – Adley

+0

이 링크의 요점은 무엇입니까? – Glund