如何让广告出现在Android的活动中?

时间:2016-06-02 18:56:14

标签: android android-layout

我有一个带有xml布局的android活动,如下所示:

<RelativeLayout>
 ...
    <GridLayout>    
    ...
    </GridLayout>
 ....
 </RelativeLayout>

我想添加广告 - 东西。我尝试了以下设置:

<LinearLayout>
    <RelativeLayout>
     ...
        <GridLayout>    
        ...
        </GridLayout>
     ....
     </RelativeLayout>
    <com.google.android.gms.ads.AdView>
    ...
    </com.google.android.gms.ads.AdView>
</LinearLayout>

但它没有显示广告(点表示我认为对此问题不重要的其他内容)。是否有一些特殊的技巧可以展示广告?使布局更复杂?是否有特殊的布局 - 我必须使用的东西?

我的主要活动确实展示了广告;这里的结构如下:

<LinearLayout>
    ...
    <android.support.design.widget.CoordinatorLayout>
        <LinearLayout>
        ...
        </LinearLayout>

    </android.support.design.widget.CoordinatorLayout>
    <com.google.android.gms.ads.AdView>
    ....
    </com.google.android.gms.ads.AdView>
<LinearLayout

真实布局xml文件的更完整示例(剥离了真正不需要的部分......)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#cccccc"
        >

        <GridLayout
            android:id="@+id/grid"
            android:layout_margin="30dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_above="@+id/new_cancel"
            android:alignmentMode="alignBounds"
            android:columnCount="10"
            android:columnOrderPreserved="false"
            android:useDefaultMargins="true">

        // REMOVED TEXTVIEW, EDITTEXT, IMAGEBUTTONS etc HERE

        </GridLayout>

        <Button
            android:id="@+id/new_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:background="@color/colorPrimaryDark"
            android:text="Cancel"
            android:layout_margin="5dp"
            />

        <Button
            android:id="@+id/new_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:background="@color/colorPrimaryLight"
            android:text="Ok"
            android:layout_margin="5dp"
            />

    </RelativeLayout>

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>
</LinearLayout>

P.S。 LinearLayoutRelativeLayout等内容的一般名称是什么?

3 个答案:

答案 0 :(得分:1)

放弃ADS初始化的问题,正如您所说,它适用于其他活动,并专注于布局问题,我会说问题如下:

你有一个垂直LinearLayout覆盖整个屏幕(顶层的match_parent)和两个孩子

  • 第一个子节点是一个覆盖整个父节点的MatchLayout(match_parent)
  • 第二个孩子是可能正在显示的广告视图,但您无法看到它,因为它从屏幕高度后的第一个像素开始。

所以为了纠正这个问题,我建议你试试:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="#cccccc"
    >
    .
    .
    .
</RelativeLayout>

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>

我还建议您根据需要为广告视图提供适当的尺寸(https://developers.google.com/android/reference/com/google/android/gms/ads/AdSize#constant-summary)。然后,我建议使用FrameLayout,因为它比linearlayout轻。你会这样做:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout  
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#cccccc"
        android:layout_marginBottom = "50dp">
        .
        .
        .
     </RelativeLayout>

     <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity="bottom|center_horizontal"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
     </com.google.android.gms.ads.AdView>
</FrameLayout>

答案 1 :(得分:1)

据我所知,您必须使用AdRequest对象在您的活动代码中初始化您的广告:

    AdView adView = (AdView) findViewById( R.id.adView );
    AdRequest request = new AdRequest.Builder()
            .build();
    adView.loadAd( request );

答案 2 :(得分:0)

确保您的Admob布局在xml视图中显示。将您的admob视图放在RelativeLayout中并尝试使用android:alignparentBottom:true

您可以查看此答案。 https://stackoverflow.com/a/28578320/2022000