AdView не отображается с ExpandableListView

Я хочу интегрировать объявление Admob с моим приложением для Android. все работает отлично, но рекламный баннер не отображается! я не знаю в чем проблема. anyhelp плз это мой код. для activity_main.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/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f4f4f4"
android:orientation="vertical" >

<ExpandableListView
    android:id="@+id/lvExp"
     android:layout_width="match_parent"
     android:layout_height="wrap_content" />

<com.google.ads.AdView
    android:id="@+id/adView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-7203358988240052/2007826925"
    ads:loadAdOnCreate="true"/>

</LinearLayout>

Для моего Main_Activity.java я использовал:

    AdView adView = (AdView)this.findViewById(R.id.adView);
    adView.loadAd(new AdRequest());

1 ответ

Решение

Вы используете LinearLayout, который использует подход "сначала старший ребенок". В вашей компоновке ваш старший ребенок - ExpandableListView (ELV), и, несмотря на то, что вы указали, что высота ELV должна оборачивать его содержимое, он все еще занимает весь экран, поскольку в ELV достаточно содержимого для этого., Следовательно, нет места для отображения вашего AdsView.

Одним из вариантов является использование атрибута android: layout_weight для распределения доступного пространства экрана между различными виджетами. Итак, если вы хотите, чтобы ваши виджеты разделяли пространство экрана так, чтобы ELV получало 90% экрана, а AdsView - 10% экрана, вы можете сделать что-то вроде этого:

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

<ExpandableListView
    android:id="@+id/lvExp"
     android:layout_width="match_parent"
     android:layout_height="0dip" <!-- When you are using weights, set the height to 0 as the weight will control the height -->
     android:layout_weight="90" />

<com.google.ads.AdView
    android:id="@+id/adView"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="10"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-7203358988240052/2007826925"
    ads:loadAdOnCreate="true"/>

</LinearLayout>

Когда вы используете вес, вы должны установить высоту на ноль, так как вес будет контролировать высоту в вертикальной ориентации.

Просто используйте любое соотношение, которое вы хотите. Вы можете использовать 80/20 или 75/25 или что угодно.

РЕДАКТИРОВАТЬ: я загрузил ваше приложение по указанной вами ссылке и запустил код. Первое, что я заметил, это то, что ваш AdView занимает место. Это означает, что макет в порядке - это то, что вы не получаете никакой рекламы для показа. Поэтому я некоторое время просматривал ваш код, и меня сразу поразило, что вы используете устаревший SDK Google Mobile Ads. Я знаю, что это устарело (см. https://developers.google.com/mobile-ads-sdk/android-legacy/), что означает, что вы не можете отправить приложение в Play Store, используя это. Это было бы просто отклонено. Но я не уверен, что это причина. Я не получил сообщение об ошибке, которое вы получили. Вместо этого я получил:

No AdResponse found, <message: /log> 
Bad request.
onFailedToReceiveAd(Invalid Ad request.)

Это означает, что вы получаете что-то с сервера. Итак, ваш запрос выполняется правильно. Поэтому я провел небольшое исследование и обнаружил, что реклама не возвращается в первые несколько раз (на этом форуме довольно много ответов), и эта проблема, похоже, существует с устаревшим SDK., Так что это может быть причиной. Помимо этого, я не могу думать ни о чем другом. У меня есть некоторые теории, но мне нужно было бы провести некоторое исследование, прежде чем я буду уверен. Кроме того, на sidenote, вы должны иметь:

ads:testDevices="your device id goes here" // one you get when you type adb devices
// this is to ensure that the services know you are simply testing and not using your own account to hit the service

В заключение я бы предложил вам перейти на сервисы Google Play Admob. Я использовал его только для практики и в учебных целях, и он работал нормально. Надеюсь это поможет.

Другие вопросы по тегам