2013-11-22 5 views
12

Моя голова чуть не взорвалась сегодня, потому что весь день я пытался решить проблему с моим AdView из AdMob. Я получаю ошибку, упомянутую в названии. Я googled через 3 страницы, но ничего. То же самое, что и я. Это мой XML-файл:Android - AdView отсутствует необходимый атрибут XML 'adSize'

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFF" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.48" 
     android:src="@drawable/butters10" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="42dp" > 

     <Button 
      android:id="@+id/prev" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:background="@drawable/prev" /> 

     <Button 
      android:id="@+id/next" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" 
      android:background="@drawable/next" /> 
    </RelativeLayout> 

    <com.google.ads.AdView 
     xmlns:ads="http://schemas.android.com/apk/libs/com.google.ads" 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ads:loadAdOnCreate="true" 
     app:adSize="BANNER" 
     app:adUnitId="------------------------------" > 
    </com.google.ads.AdView> 

</LinearLayout> 

Я попытался изменить app ключевое слово ads, но проблема все еще показывает вверх.

Другое дело, что я действительно хочу добавить одно и то же объявление к тому же идентификатору единицы в несколько операций. Я добавил этот код точно в свой первый файл xml-активности, и все работает нормально, но во втором действии он вообще не работает. Спасибо за любую помощь.

+0

в 'Xmlns: объявления = "http://schemas.android.com/apk/libs/com.google.ads"' потребности в быть в вашем linearlayout Я считаю, что под андроидом один – tyczj

ответ

20

Изменить

xmlns:ads="http://schemas.android.com/apk/libs/com.google.ads" 

в

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 

Вся документация, кажется, относится к пространству имен как в /lib/ не /libs/

и ссылки на теги, используя ads

<com.google.ads.AdView 
    xmlns:ads="http://schemas.android.com/apk/libs/com.google.ads" 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    ads:loadAdOnCreate="true" 
    ads:adSize="BANNER" 
    ads:adUnitId="------------------------------" /> 
+0

Похоже, вы только что спасли мой день.Я перешел из libs в lib, и это помогло. На самом деле я не знаю, как мне удалось написать libs /. Что было глупо. Большое спасибо Ken :) –

55

Чтобы заставить его работать с Google Play использования услуг:

Xmlns: объявления = "http://schemas.android.com/apk/res-auto"

в файле XML ,

+1

Это должен быть правильный ответ! –

3

XML-атрибуты «loadAdOnCreate» и «testDevices» больше недоступны. Для того, чтобы ваше объявление работать с Google Play Services

Вот XML макет

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:ads="http://schemas.android.com/apk/res-auto" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
<TextView android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/hello"/> 
<com.google.android.gms.ads.AdView android:id="@+id/adView" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         ads:adSize="BANNER" 
         ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"/> 
</LinearLayout> 

А вот файл ява

package com.google.example.gms.ads.xml; 

import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 

import android.app.Activity; 
import android.os.Bundle; 

/** 
* A simple {@link Activity} which embeds an AdView in its layout XML. 
*/ 
public class BannerXMLSample extends Activity { 

    private static final String TEST_DEVICE_ID = "INSERT_YOUR_TEST_DEVICE_ID_HERE"; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // The "loadAdOnCreate" and "testDevices" XML attributes no longer available. 
    AdView adView = (AdView) this.findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder() 
     .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
     .addTestDevice(TEST_DEVICE_ID) 
     .build(); 
    adView.loadAd(adRequest); 
    } 
} 

См пример здесь https://github.com/googleads/googleads-mobile-android-examples/tree/master/admob/banner-xml

5

Мои Требование состояло в том, чтобы динамически передавать идентификаторы рекламных блоков, а не указывать их в xml. Оказывается, каркас не нравится микс из них, поэтому я создаю мои объявления 100% программно:

public class AdMobBanner extends FrameLayout { 

private AdView adView; 

public AdMobBanner(Context context, AdParams params) { 
    super(context); 

    adView = new AdView(context); 
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.gravity = Gravity.CENTER; 
    adView.setLayoutParams(layoutParams); 
    adView.setAdSize(AdSize.BANNER); 
    adView.setAdUnitId(params.getAdUnitId()); 
    addView(adView); 
} 

public void showAdvert(AdParams params) { 
    AdRequest.Builder builder = new AdRequest.Builder(); 

    for (String id: params.getTestDevices()) { 
     builder.addTestDevice(id); 
    } 
    adView.loadAd(builder.build()); 
} 

@Override 
public void pause() { 
    adView.pause(); 
} 

@Override 
public void resume() { 
    adView.resume(); 
} 

} 

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

+1

К сожалению, это правильный ответ. Настройка содержимого в коде, когда представление было добавлено через xml, прослушивается. – m02ph3u5

0

Добавить android:theme="@android:style/Theme.Translucent" в свой Android Manifest после meta-data

Screenshot

Смежные вопросы