2017-02-23 118 views
1

Мой XML-код для объявления являетсяУстановка adsize программно не работает NativeAdExpress

<com.google.android.gms.ads.NativeExpressAdView 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:adUnitId="YOUR_AD_ID"/> 

я устанавливаю adsize программно, используя следующий код

mAdView = (NativeExpressAdView) cardView.findViewById(R.id.adView); 
int width = screenwidth - 16; 
mAdView.setAdSize(new AdSize(width, 250)); 
AdRequest request = new AdRequest.Builder() 
    .addTestDevice("YOUR_DEVICE") 
    .build(); 
mAdView.loadAd(request); 

Когда я бегу, то приложение падает с ошибка

java.lang.IllegalStateException: Идентификатор размера объявления и рекламного блока должен быть установлен до вызова loadAd.

Он отлично работает, когда я пытаюсь как этот

<com.google.android.gms.ads.NativeExpressAdView 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:adUnitId="ca-app-pub-3940256099942544/1072772517" 
    app:adSize="320x250"/> 

Но я хочу, чтобы установить ширину объявления динамически

+0

Try включая 'Xmlns: объявления = "http://schemas.android.com/apk/res-auto"' в файле 'XML» – aldakur

ответ

1

Он был решен, когда я добавил NativeExpressAdView программно и удалился из XML следующим образом.

mAdView = new NativeExpressAdView(this); 
int width = screenwidth - 16; 
mAdView.setAdSize(new AdSize(width, 250)); 
mAdView.setAdUnitId("myAdUnitId"); 

// Create an ad request. 
AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); 

// Optionally populate the ad request builder. 
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); 

// Add the NativeExpressAdView to the view hierarchy. 
layout.addView(mAdView); 

// Start loading the ad. 
mAdView.loadAd(adRequestBuilder.build()); 
0

Я устанавливаю adsize динамически и оборотный штраф. Ниже мой код.

private void setUpAndLoadNativeExpressAds() { 
    // Use a Runnable to ensure that the RecyclerView has been laid out before setting the 
    // ad size for the Native Express ad. This allows us to set the Native Express ad's 
    // width to match the full width of the RecyclerView. 
    mRecyclerView.post(new Runnable() { 
     @Override 
     public void run() { 
      final float scale = MainActivity.this.getResources().getDisplayMetrics().density; 
      // Set the ad size and ad unit ID for each Native Express ad in the items list. 
      for (int i = 0; i <= mRecyclerViewItems.size(); i += ITEMS_PER_AD) { 
       adView = (NativeExpressAdView) mRecyclerViewItems.get(i); 
       final CardView cardView = (CardView) findViewById(R.id.ad_card_view); 
       final int adWidth = cardView.getWidth() - cardView.getPaddingLeft() 
         - cardView.getPaddingRight(); 
       AdSize adSize = new AdSize((int) (adWidth/scale), NATIVE_EXPRESS_AD_HEIGHT); 
       adView.setAdSize(adSize); 
       adView.setAdUnitId(AD_UNIT_ID); 
      } 
      adView.loadAd(new AdRequest.Builder().build()); 
     } 
    }); 
} 

Возможно, вам нужно установить идентификатор блока перед загрузкой добавлений.

Надеюсь, это вам поможет.

+0

я добавленный рекламный блок идентификатор в XML раньше. Когда я добавлял то же программное обеспечение, авария исправлена, но есть ошибка: ** Требуется атрибут XML adSize **. –