2013-08-01 63 views
4

我的肖像应用程序底部有一个智能横幅。如何使admob中的SMART_BANNER广告在Android中正确填充?

我的布局是这样的:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingBottom="0dp" 
     android:paddingLeft="0dp" 
     android:paddingRight="0dp" 
     android:paddingTop="0dp"> 

     <TextSwitcher 
      ... 
      Some TextSwitcher Stuff Here 
      ... /> 

     <com.google.ads.AdView 
      xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads" 
      android:id="@+id/bannerAd" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:gravity="bottom" 
      android:visibility="visible" 
      googleads:adSize="SMART_BANNER" 
      googleads:adUnitId="@string/admobId" /> 

    </RelativeLayout> 

我的清单具有相应权限,这样的:

<activity 
      android:name="com.google.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" > 
</activity> 

我的广告是由该代码初始化:

private void initialiseAds() 
    { 
     AdView adView = (AdView) findViewById(R.id.bannerAd); 
     adView.setAdListener(new MyAdListener(adView)); 
     AdRequest adRequest = new AdRequest(); 
     adRequest.addKeyword("games"); 
     adRequest.addKeyword("tabletop games"); 
     adRequest.addKeyword("board games"); 
     adRequest.addKeyword("monopoly"); 
     adRequest.addKeyword("gambling"); 
     adRequest.addKeyword("dice"); 
     final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 
     String deviceId = tm.getDeviceId(); 
     adRequest.addTestDevice(deviceId); 
     adView.loadAd(adRequest); 
    } 

当我运行应用程序,我的广告不会显示。 LogCat给我这个:

08-01 11:24:59.015: E/Ads(10436): Not enough space to show ad! Wants: <720, 100>, Has: <656, 935> 
08-01 11:24:59.020: E/Ads(10436): Not enough space to show ad! Wants: <720, 100>, Has: <656, 935> 

该设备是一个银河S3。这似乎是错误的大小((720,100)肯定对于手机横幅应用程序太大)。

SMART_BANNER是用XML声明的,所以我不能相信AdView需要重新生成incode,因为它必须已经知道第一个实例的大小了吗?

任何想法?

编辑:

如果我把SMART_BANNER只有最外部的布局里面,这是XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:paddingBottom="0dp" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:paddingTop="0dp" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/btnRollDice" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:layout_marginLeft="@dimen/activity_horizontal_margin" 
     android:layout_marginRight="@dimen/activity_horizontal_margin" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:contentDescription="@string/buttonDescription" 
     android:onClick="rollDice" 
     android:text="@string/btnRoll" 
     android:textSize="40sp" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingBottom="0dp" 
     android:paddingLeft="0dp" 
     android:paddingRight="0dp" 
     android:paddingTop="0dp"> 

     <TextSwitcher 
      android:id="@+id/diceValue" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_gravity="center" 
      android:animateFirstView="false" 
      android:contentDescription="@string/textSwitcherDescription" 
      android:inAnimation="@anim/slide_down" 
      android:outAnimation="@anim/abc_fade_out" 
      android:textAlignment="center" 
      android:visibility="visible" /> 

    </RelativeLayout> 
    <com.google.ads.AdView 
      android:id="@+id/bannerAd" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_margin="0dp" 
      ads:adSize="SMART_BANNER" 
      ads:adUnitId="@string/admobId" 
      android:gravity="bottom" 
      android:padding="0dp" 
      android:visibility="visible" /> 
</LinearLayout> 

这是错误消息:

08-01 12:59:38.120: E/Ads(22919): Not enough space to show ad! Wants: <720, 100>, Has: <720, 0> 

我怀疑这是因为RelativeLayout和Button已经填充了LinearLayout并且没有留下AdView的空间。有没有办法将wrap_contents的高度值分配给adview而不影响RelativeLayout?

编辑:解:

这得到它的方式约95%有(足够好:))。 TextSwitcher约有1%的折扣死机,它的高度略高,但除非你凝视并比较数小时,否则你不会注意到。希望这会帮助某人。感谢Harshid和William的贡献。

<!-- This is the XML for the Portrait View of the App 
It has 2 major tiers 
The first tier contains 3 items: 
    The Ad Banner 
    The button 
    The 2nd Tier 
The second tier contains 1 item 
    The TextSwitcher 

XML is pretty readable so just read it! :) 

--> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:paddingBottom="0dp" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:paddingTop="0dp" 
    tools:context=".MainActivity" 
    android:id="@+id/masterContainer"> 


    <com.google.ads.AdView 
     android:id="@+id/bannerAd" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_margin="0dp" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     ads:adSize="SMART_BANNER" 
     ads:adUnitId="@string/admobId" 
     android:padding="0dp" 
     android:visibility="visible" /> 

    <Button 
     android:id="@+id/btnRollDice" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:layout_marginLeft="@dimen/activity_horizontal_margin" 
     android:layout_marginRight="@dimen/activity_horizontal_margin" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:layout_marginBottom="0dp" 
     android:paddingBottom="0dp" 
     android:contentDescription="@string/buttonDescription" 
     android:onClick="rollDice" 
     android:text="@string/btnRoll" 
     android:textSize="40sp" /> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@id/bannerAd" 
     android:layout_below="@id/btnRollDice" 
     android:layout_margin="0dp" 
     android:orientation="vertical" 
     android:paddingBottom="0dp" 
     android:paddingLeft="0dp" 
     android:paddingRight="0dp" 
     android:paddingTop="0dp" > 

      <TextSwitcher 
       android:id="@+id/diceValue" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="false" 
       android:layout_alignParentLeft="false" 
       android:layout_alignParentRight="false" 
       android:layout_alignParentTop="false" 
       android:layout_centerHorizontal="false" 
       android:layout_centerInParent="true" 
       android:layout_centerVertical="false" 
       android:layout_gravity="center" 
       android:animateFirstView="false" 
       android:contentDescription="@string/textSwitcherDescription" 
       android:inAnimation="@anim/slide_down" 
       android:outAnimation="@anim/abc_fade_out" 
       android:textAlignment="center" 
       android:visibility="visible" /> 

     </RelativeLayout> 

</RelativeLayout> 

回答

4

我觉得你的Admob banner是在布局。

看跌旗帜的所有布局和内的主要布局。因为你已经使用的填充,保证金等等等等的侧..

<Your Main Layout> 
    <Secondary Layout> 
     < Layout /> 
    </Secondary Layout> 
//put your banner here 
</Your Main Layout> 

尝试this方式。

+0

更新的问题与新的XML文件:) – BigTobster

+0

更好,但仍不完全。横幅现在显示完美(做得好!),但容器是wrap_content,所以它填充页面的其余部分(因为smart_banner可以是任何高度)。这意味着内容被推出页面的中心。我能想到的唯一方法是回到方形1并将两个元素放在一个室内布局中! – BigTobster

+0

不幸的是,您的答案不适用于我的问题。我试过调整它,但它严重不会一起去(我是一个noob)。我会接受你的回答,理由是它可能适用于没有与我做同样设置的其他人。谢谢你的帮助。 – BigTobster

0

检查设备DP和负载使用各种广告常数(横幅,排行榜等)与AdMob中介给出相应的键。

+0

我没有使用中介。只需使用标准广告。我在我的设备DP上特别检查什么? – BigTobster

1

如果你想使用你的第二个布局,那么你应该给相对布局layout_weight 1(layout_weight只适用于LinearLayouts)。这将告诉它扩展以填充包含LinearLayout中的任何未使用的空间。

建议您阅读http://developer.android.com/guide/topics/ui/declaring-layout.html以更好地理解Android布局,您无差别地使用RelativeLayout和LinearLayout的属性。某些布局属性仅适用于一种布局。

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

    <Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     .../> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     ...> 

     <TextSwitcher 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      .../> 
    </RelativeLayout> 

    <com.google.ads.AdView 
      android:id="@+id/bannerAd" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      ads:adSize="SMART_BANNER" 
      ads:adUnitId="@string/admobId" 
    /> 
</LinearLayout> 
+0

感谢您的回答。这非常有帮助。你的链接已经给了我最终需要的代码所需的答案:)一些狡猾的属性是因为我改变了相对和线性布局并且该死的懒惰!其中一些我搞砸了,所以这个链接绝对有用。 – BigTobster

6

确保您的外部布局没有任何填充

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="0dp" 
    android:paddingLeft="0dp" // Change to 0dp 
    android:paddingRight="0dp" // Change to 0dp 
    android:paddingTop="2dp" > 
0

从你的XML代码,删除四个填充属性即paddingBottom来,PaddingLeft,PaddingRight,PaddingTop