Как я могу использовать оболочку TabHost, содержащую MapView, который также отображает представление AdMob под ним? - PullRequest
6 голосов
/ 18 сентября 2010

Я очень новичок в Android (например, 2 дня), но у меня есть опыт работы с другими инструментами верстки.Я пытаюсь поместить AdView ниже TabHost, и кажется, что я могу заставить TabWidget или AdView отображаться правильно, но никогда не одновременно.

Во-первых, вот художественная версия ASCII того, что я 'Я пытаюсь выполнить:

--------------------------------------------
| Tab 1               | Tab 2              |
--------------------------------------------
| MapView when tab 1 is selected           |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
--------------------------------------------
| AdView that stays no matter what tab     |
--------------------------------------------

Как видите, я пытаюсь получить AdView вне TabWidget или FrameLayout.Я хочу, чтобы он был ниже всего содержимого табуляции.

Вот макет, который у меня есть до при добавлении 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_height="fill_parent"
 android:layout_width="wrap_content"
 >

 <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <LinearLayout android:layout_width="fill_parent"
   android:id="@+id/home_layout" android:orientation="vertical"
   android:layout_height="fill_parent">

   <TabWidget android:id="@android:id/tabs"
    android:layout_width="fill_parent" android:layout_height="wrap_content" />

   <FrameLayout android:id="@android:id/tabcontent"
    android:layout_width="fill_parent" android:layout_height="fill_parent">

    <RelativeLayout android:id="@+id/emptylayout1"
     android:orientation="vertical" android:layout_width="fill_parent"
     android:layout_height="fill_parent" />
    <!--
     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_height="fill_parent" android:layout_width="wrap_content">

 <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <LinearLayout android:layout_width="fill_parent"
   android:id="@+id/home_layout" android:orientation="vertical"
   android:layout_height="fill_parent">

   <TabWidget android:id="@android:id/tabs"
    android:layout_width="fill_parent" android:layout_height="wrap_content" />

   <FrameLayout android:id="@android:id/tabcontent"
    android:layout_width="fill_parent" android:layout_height="fill_parent">

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


  </LinearLayout>



 </TabHost>

 <LinearLayout android:layout_width="fill_parent"
  android:id="@+id/ad_layout" android:layout_height="wrap_content"
  android:gravity="bottom" android:layout_alignParentBottom="true"
  android:layout_alignBottom="@+id/home_layout">

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

</RelativeLayout>

К сожалению, в этом моем MapView на первой вкладке помещаются элементы управления Zoomв верхней части AdView.Есть ли какая-то простая раскладка, которую мне не хватает?Потому что я могу получить TabWidget для wrap_content для высоты или AdView для wrap_content для высоты, но только когда они идут выше «@android: id / tabcontent».

Все, что ниже содержимого вкладки, съедаетсяMapView.

Спасибо

1 Ответ

5 голосов
/ 18 сентября 2010

Не уверен, что это одно и то же, но мне пришлось поместить кнопку внизу действия и заполнить оставшееся пространство ListView.Для этого я сделал что-то вроде этого:

<RelativeLayout>
    <LinearLayout 
        android:id="@+id/ad_id"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">

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

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

Немного нелогично объявить нижнюю часть представления перед верхней::)

...