Вы используете LinearLayout, который использует "старший ребенок первым" подход. В вашем макете вы старший ребенок - ExpandableListView (ELV), и, несмотря на то, что вы указали, что высота ELV должна быть обертывающей его содержимое, она по-прежнему занимает весь экран, так как в ELV достаточно контента для этого , Следовательно, для вашего рекламного объявления нет места.
Один из вариантов - использовать атрибут 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 или что угодно.
EDIT: Я загрузил ваше приложение из предоставленной вами ссылки и запускал код. Первое, что я заметил, это то, что ваш AdView занимает место. Это означает, что макет в порядке - вы не получаете показ рекламы. Поэтому я некоторое время оглядывал свой код, и мне сразу же показалось, что вы используете устаревший SDK Google Mobile Ads. Я знаю, что это устарело (см. https://developers.google.com/mobile-ads-sdk/android-legacy/), что означает, что вы не можете отправить приложение в Play Маркет, используя это. Это будет просто отвергнуто. Но я не уверен, что это причина. Я не получил сообщение об ошибке, которое вы получили. Вместо этого я получил:
No AdResponse found, <message: /log>
Bad request.
onFailedToReceiveAd(Invalid Ad request.)
Это означает, что вы получаете что-то с сервера. Таким образом, ваш запрос выполняется правильно. Поэтому я немного поработал и выяснил, что в последнее время не было возвращено ни одного объявления (на этом форуме есть несколько ответов), и эта проблема, похоже, существует с устаревшим SDK , Так что это может быть причиной. Вне этого я не могу думать ни о чем другом. У меня есть некоторые теории, но мне нужно будет провести некоторое исследование, прежде чем я буду уверен. Кроме того, на Замечание, вам нужно иметь:
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. Я использовал его только для практики до и для обучения, и он работал нормально. Надеюсь это поможет.
Благодарим вас за ответ и за то время, которое вы ему дали. У меня все еще есть одна и та же проблема с этими ошибками. -JS: Uncaught ReferenceError: AFMA_getSdkConstants не определен (около: blank: 1) - –
Вы можете добавить полный стек ошибки к вашему вопросу. Похоже, что это не проблема пользовательского интерфейса и скорее логическая ошибка в коде. – ucsunil
К сожалению, я не могу опубликовать изображение. , но я не могу написать эти erreors: -JS: Uncaught ReferenceError: AFMA_getSdkConstants не определен (о: пусто: 1) -Uncaught ReferenceError: AFMA_getSdkConstants не определен: 1 - –