1

しばらくの間、これについて壁に頭をぶつけていました。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 ファイルの oncreate 呼び出しで:

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);

誰にも提案はありますか?

4

3 に答える 3

1

イニシャルLinearLayoutで を指定android:orientation="vertical"し、代わりにAdView高さを指定する必要がありますwrap_content(または 50 dp - これは私のアプリの 1 つにあるものです)。これで十分です。あなたが持っているように、とScrollViewが正しいです。wrap_contentandroid:layout_weight="1"

于 2011-06-22T07:26:50.743 に答える
0

さて、これを機能させる方法を見つけました。しばらくの間、そこにちょっと腹を立てました。

私が見つけた方法は、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>

[メイン].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();
}

他の誰かがこの問題を抱えている場合、これが役立つことを願っています!

于 2011-06-22T05:16:07.213 に答える
0

あなたはAdView高さを作りましたfill_parentwrap_content代わりに作るとの高さにScrollViewなりますfill_parent

于 2011-06-21T06:17:17.113 に答える