AdMob AdView появляется, но остальная часть моего макета исчезла (Android) - PullRequest
1 голос
/ 21 июня 2011

Некоторое время вот так бился головой об стену. Попытка заставить AdMob AdView отображаться над ScrollView, а ScrollView заполнить оставшуюся часть экрана. Пока все, что я смог сделать, это заставить AdView отображаться и правильно загрузить тестовое объявление, но остальная часть экрана просто черная. Я не могу понять, где, черт возьми, исчез ScrollView.

Я пробовал дюжину различных решений, в том числе загрузку программы программно, а не через main.xml и изменение высоты ScrollView на wrap_content, но все еще с той же проблемой. Также попытался установить высоту ScrollView в 0px и вес в 1 для предложения другого потока, но это тоже не работает. Я предполагаю, что это простой ответ, но я просто в тупик прямо сейчас.

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:id="@+id/mainLayout"
   >
<com.google.ads.AdView android:id="@+id/adView"
                     android:layout_width="fill_parent"
                     android:layout_height="fill_parent"
                     ads:adUnitId="[my ad id]"
                     ads:adSize="BANNER"
                     />
<ScrollView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" 
    android:drawSelectorOnTop="false"
    android:background="[background drawable]">
[snip all the crap within the scrollview which is irrelevant]
</ScrollView>
</LinearLayout>

, а затем в вызове моего основного файла .java:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //programattically create adview
    //AdView adView = new AdView(this, AdSize.BANNER, "[my ad id]");
    //find main layout and add adview to it
    //LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
    //layout.addView(adView);

    //xml adview
    AdView adView = (AdView)this.findViewById(R.id.adView);

    //set up ad request with test devices/emulator
    AdRequest request = new AdRequest();
    request.addTestDevice(AdRequest.TEST_EMULATOR);
    adView.loadAd(request);

У кого-нибудь есть предложения?

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Ваш начальный LinearLayout должен указать android:orientation="vertical", а затем вместо него сделать AdView height wrap_content (или 50dp - это то, что у меня в одном из моих приложений).Этого должно быть достаточно.ScrollView правильно, как у вас, с wrap_content и android:layout_weight="1".

0 голосов
/ 22 июня 2011

Хорошо, нашел способ заставить эту работу.Какое-то время это сводило с ума.

Метод, который я нашел работающим, заключался в переключении на RelativeLayout, программной загрузке объявления и добавлении ViewStub, который нарастает представление на ту же высоту, что и объявление, при загрузке объявления (используя AdListener).Я подозреваю, что есть более элегантный способ сделать это, но это определенно работает для меня.

main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ViewStub
    android:id="@+id/mainPlaceholder"
    android:inflatedId="@+id/mainAdInflated"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout="@layout/ad_mob_layout"
    />                         
<ScrollView 
    android:layout_below="@+id/mainAdInflated"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="[background drawable]"
    >
[snip irrelevant views]
</ScrollView>
</RelativeLayout>

ad_mob_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<View
    android:layout_width="fill_parent"
    android:layout_height="50dip"            
    />
</LinearLayout>

[main] .java:

public class [main] extends Activity implements AdListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //programattically create adview
    AdView adView = new AdView(this, AdSize.BANNER, "a14e0010a66c749");
    //find main layout and add adview to it
    RelativeLayout layout = (RelativeLayout)findViewById(R.id.mainLayout);
    layout.addView(adView);      

    //set up ad request with test devices/emulator
    AdRequest request = new AdRequest();
    request.addTestDevice(AdRequest.TEST_EMULATOR);
    adView.loadAd(request);
    adView.setAdListener(this);
}

@Override
public void onReceiveAd(Ad arg0) {
    @SuppressWarnings("unused")
    View stubToInflate = ((ViewStub)this.findViewById(R.id.mainPlaceholder)).inflate();
}

Надеюсь, это поможет, если у кого-то еще возникла эта проблема!

0 голосов
/ 21 июня 2011

Вы сделали AdView высоту fill_parent. Сделайте вместо этого wrap_content, а высота ScrollView будет fill_parent.

...