如何使用包含 MapView 的包装 TabHost,该 MapView 在其下方显示 AdMob 视图?

Posted

技术标签:

【中文标题】如何使用包含 MapView 的包装 TabHost,该 MapView 在其下方显示 AdMob 视图?【英文标题】:How can I use a wrap a TabHost containing a MapView that also displays an AdMob view below it? 【发布时间】:2011-04-14 02:30:05 【问题描述】:

我对 android 很陌生(大概 2 天),但我对其他布局工具包很有经验。我正在尝试将 AdView 放在 TabHost 下方,似乎我可以让 TabWidget 或 AdView 正确显示,但不能同时显示两者。

首先,这是我想要完成的 ASCII 艺术版本:

------------------------------------------ |选项卡 1 |选项卡 2 | ------------------------------------------ |选择选项卡 1 时的 MapView | | | | | | | | | | | | | ------------------------------------------ |无论哪个标签都保留的 AdView | ------------------------------------------

如您所见,我试图将 AdView 置于 TabWidget 或 FrameLayout 之外。我希望它位于整个 tabhost 内容之下。

这是我在添加 AdView 之前得到的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:myapp="http://schemas.android.com/apk/res/org.mbs3.android.ufcm"
 android:layout_
 android:layout_
 >

 <TabHost android:id="@+id/tabhost" android:layout_
  android:layout_>
  <LinearLayout android:layout_
   android:id="@+id/home_layout" android:orientation="vertical"
   android:layout_>

   <TabWidget android:id="@android:id/tabs"
    android:layout_ android:layout_ />

   <FrameLayout android:id="@android:id/tabcontent"
    android:layout_ android:layout_>

    <RelativeLayout android:id="@+id/emptylayout1"
     android:orientation="vertical" android:layout_
     android:layout_ />
    <!--
     programatically added tabs will appear here,
                                        one per activity
    -->
   </FrameLayout>


  </LinearLayout>


 </TabHost>
</RelativeLayout>

现在,我尝试了几种不同的技巧来添加 AdView,例如 http://www.spencerelliott.ca/blogs/blog-android-menu。这是我想出的最佳布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:myapp="http://schemas.android.com/apk/res/org.mbs3.android.ufcm"
 android:layout_ android:layout_>

 <TabHost android:id="@+id/tabhost" android:layout_
  android:layout_>
  <LinearLayout android:layout_
   android:id="@+id/home_layout" android:orientation="vertical"
   android:layout_>

   <TabWidget android:id="@android:id/tabs"
    android:layout_ android:layout_ />

   <FrameLayout android:id="@android:id/tabcontent"
    android:layout_ android:layout_>

    <RelativeLayout android:id="@+id/emptylayout1"
     android:orientation="vertical" android:layout_
     android:layout_ />
    <!--
     programatically added tabs will appear here, usually one per
     activity
    -->
   </FrameLayout>


  </LinearLayout>



 </TabHost>

 <LinearLayout android:layout_
  android:id="@+id/ad_layout" android:layout_
  android:gravity="bottom" android:layout_alignParentBottom="true"
  android:layout_alignBottom="@+id/home_layout">

  <com.admob.android.ads.AdView android:id="@+id/ad"
   android:layout_ android:layout_
   myapp:backgroundColor="#000000" myapp:primaryTextColor="#FFFFFF"
   myapp:secondaryTextColor="#CCCCCC"
   myapp:keywords="words" />
 </LinearLayout>

</RelativeLayout>

不幸的是,在第一个选项卡中,我的 MapView 将缩放控件置于 AdView 之上。我缺少一些简单的布局吗?因为我可以将 TabWidget 设置为 wrap_content 的高度,或将 AdView 设置为 wrap_content 的高度,但只有当它们超出“@android:id/tabcontent”时。

标签内容下方的任何内容都会被 MapView 吃掉。

谢谢

【问题讨论】:

【参考方案1】:

不确定是否相同,但我必须在活动底部放置一个按钮,并用 ListView 填充其余空间。为此,我做了一些类似这样的事情:

<RelativeLayout>
    <LinearLayout 
        android:id="@+id/ad_id"
        android:layout_alignParentBottom="true"
        android:layout_
        android:layout_>

       <!-- the ad goes here -->
    </LinearLayout>

    <TabHost
        android:layout_above="@id/ad_id"
        android:layout_
        android:layout_>
      <!-- your view -->
    </TabHost>
</RelativeLayout>

在上半部分之前声明视图的下半部分有点违反直觉:-)

【讨论】:

以上是关于如何使用包含 MapView 的包装 TabHost,该 MapView 在其下方显示 AdMob 视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

如何在使用 GoogleMap 的活动完全加载之前显示进度条

在 MapView 上绘制 MKPolyline 显示两个位置之间的直线

如何使用 Mapview 设置布局

片段中的 MapView(蜂窝)

如何使用 SWIG 包装许多 .h 文件并包含任何依赖项?