我使用的是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进行测试。
答案 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"/>