2010-09-18 10 views
6

Sono molto nuovo per Android (come 2 giorni), ma ho esperienza con altri toolkit di layout. Sto provando a mettere un AdView sotto un TabHost, e sembra che io possa ottenere il TabWidget o l'AdView per visualizzare correttamente, ma mai entrambi.Come posso utilizzare un wrap un TabHost contenente un MapView che visualizza anche una vista AdMob sotto di esso?

In primo luogo, ecco una versione ASCII art di quello che sto cercando di realizzare:

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

Come potete vedere, sto cercando di ottenere l'AdView esterno la TabWidget o FrameLayout. Voglio che sia sotto l'intero contenuto del tabhost.

Ecco il layout che ho prima aggiungere l'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> 

Ora, ho provato un paio diversi suggerimenti per ottenere l'AdView aggiunto, come ad esempio http://www.spencerelliott.ca/blogs/blog-android-menu. Ecco il layout migliore mi si avvicinò con:

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

Purtroppo, in quella, la mia MapView nella prima scheda mette la Zoom controlla in cima alla AdView. C'è qualche layout semplice che mi manca? Cuz I può ottenere il TabWidget su wrap_content per l'altezza, o l'AdView su wrap_content per l'altezza, ma solo quando superano "@android: id/tabcontent".

Qualsiasi cosa sotto il contenuto della scheda viene mangiata dal MapView.

Grazie

risposta

5

Non so se è la stessa cosa, ma ho dovuto mettere un pulsante sul fondo di un'attività e riempire il resto dello spazio con un controllo ListView. Per fare questo ho fatto qualcosa di un po 'come questo:

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

E' un po 'poco intuitivo per dichiarare la parte inferiore della vista prima che la parte superiore :-)