6 Stimmen

Wie kann ich einen TabHost verwenden, der eine MapView enthält, die auch eine AdMob-Ansicht darunter anzeigt?

Ich bin sehr neu in Android (etwa 2 Tage), aber ich bin mit anderen Layout-Toolkits erfahren. Ich versuche, eine AdView unter einem TabHost zu setzen, und es scheint, dass ich entweder das TabWidget oder die AdView richtig anzeigen lassen kann, aber nie beide.

Hier ist zunächst eine ASCII-Kunstversion dessen, was ich zu erreichen versuche:

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

Wie Sie sehen können, versuche ich, die AdView außerhalb das TabWidget oder FrameLayout. Ich möchte, dass es unterhalb der gesamten Tabhost Inhalte sein.

Hier ist das Layout, das ich habe Hinzufügen des AdViews:

<?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>

Ich habe verschiedene Tipps ausprobiert, um das AdView hinzuzufügen, z. B. http://www.spencerelliott.ca/blogs/blog-Android-menu . Hier ist das beste Layout, das mir eingefallen ist:

<?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>

Leider befinden sich die Zoom-Steuerelemente in meiner MapView auf der ersten Registerkarte über der AdView. Gibt es ein einfaches Layout, das ich übersehe? Denn ich kann das TabWidget dazu bringen, den Inhalt für die Höhe zu wrap_content oder die AdView für die Höhe zu wrap_content, aber nur, wenn sie über die "@Android:id/tabcontent" gehen.

Alles, was unterhalb des Tab-Inhalts liegt, wird von der MapView gefressen.

Danke

5voto

Matthias Schippling Punkte 2794

Ich bin mir nicht sicher, ob es dasselbe ist, aber ich musste eine Schaltfläche an den unteren Rand einer Aktivität setzen und den Rest des Platzes mit einer ListView füllen. Um dies zu tun, habe ich etwas in der Art gemacht:

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

Es ist etwas kontra-intuitiv, den unteren Teil der Ansicht vor dem oberen Teil zu deklarieren :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X