Google Play服务的AdMob会执行不受欢迎的自动滚动操作

时间:2013-11-14 06:47:05

标签: android admob google-play-services

我使用的是Google Play服务版本13中的AdMob。我发现,当我将广告放在ScrollView内时,AdMob会在从服务器成功获取广告后尝试执行不需要的自动滚动。

package com.example.admob_bug;

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

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create the adView.
        adView = new AdView(this);
        adView.setAdUnitId("a151b03485063e0");
        adView.setAdSize(AdSize.BANNER);

        // Lookup your LinearLayout assuming it's been given
        // the attribute android:id="@+id/mainLayout".
        LinearLayout layout = (LinearLayout)findViewById(R.id.advertisement);

        // Add the adView to it.
        layout.addView(adView);

        // Initiate a generic request.
        AdRequest adRequest = new AdRequest.Builder().build();

        // Load the adView with the ad request.
        adView.loadAd(adRequest);        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

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

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

    @Override
    public void onDestroy() {
        adView.destroy();
        super.onDestroy();
    }

    private AdView adView;    
}

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        ...
        ...

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text 7"
            android:layout_margin="30dp"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <LinearLayout
            android:id="@+id/advertisement"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

        </LinearLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text 8"
            android:layout_margin="30dp"
            android:textAppearance="?android:attr/textAppearanceLarge" />        

    </LinearLayout>

</ScrollView>

完整的源代码可以从https://www.dropbox.com/s/e53zjqsc5cnilz2/admob_bug.zip

下载

在等待大约10秒后(根据网络质量),在加载广告后,您将意识到此问题。

是否有防止自动滚动的解决方法?

在我从旧的AdMob 6.4.1 JAR切换到Google Play服务的AdMob之前,这个问题不存在。

我正在使用设备Nexus S,Android 4.1.2进行测试。

2 个答案:

答案 0 :(得分:13)

更新您的activity_main.xml

 <LinearLayout
        android:id="@+id/advertisement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="blocksDescendants"
        android:orientation="vertical" >
    </LinearLayout>

工作正常。 使用nexus 4和samsung galaxy s.also emulator api 18进行测试。

答案 1 :(得分:0)

我没有使用您的代码对此进行测试,我只是假设:我认为问题在于您没有在横幅布局中预留空间,而且广告加载后它会挤进去其余的。

也许尝试在布局中添加一些最小高度以保留空间

    <LinearLayout
        android:id="@+id/advertisement"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="50dp"
        android:orientation="vertical" >

    </LinearLayout>

或者甚至可以更好地直接在xml中定义你的admob广告视图,然后将loadAdOncreate设置为true,并将广告替换为linearLayout,如下所示:

<com.google.ads.AdView android:id="@+id/adView"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:refreshInterval="60"
    ads:adUnitId="xxxxxxxxxxxxxx"
    ads:adSize="SMART_BANNER"
    ads:testDevices="TEST_EMULATOR"
    ads:loadAdOnCreate="true"/>