8

Google Play Services バージョン 13 の AdMob を使用していました。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 Service の AdMob に切り替える前は、この問題はありませんでした。

デバイス Nexus S、Android 4.1.2 を使用してテストしています。

4

2 に答える 2

12

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.また、エミュレーターapi 18でテストしています。

于 2014-02-14T13:50:28.237 に答える
0

私はあなたのコードでこれをテストしていません.

スペースを確保するために、レイアウトに最小の高さを追加してみてください

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

    </LinearLayout>

または、admob 広告ビューを xml 内で直接定義し、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"/>
于 2014-02-12T19:53:44.673 に答える