2016-06-05 15 views
0

Ich versuche, eine Aktivität mit 3 Tabs darauf zu implementieren. Ich entschied mich, FragmentTabHost für diesen Zweck zu verwenden.Muss FragmentTabHost TabWidget explizit definiert werden

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v4.app.FragmentTabHost 
     android:id="@android:id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"/> 
    </android.support.v4.app.FragmentTabHost> 

    <FrameLayout 
     android:id="@+id/realtabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     />  
</LinearLayout> 

Aber ich war überrascht, als selbstverständlich, dass vorherige Codebeispiel auf die gleiche Weise ohne TabWidget funktioniert: Ich habe einige Code-Beispiele mit folgenden Layout-Datei gefunden

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v4.app.FragmentTabHost 
     android:id="@android:id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </android.support.v4.app.FragmentTabHost> 

    <FrameLayout 
     android:id="@+id/realtabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</LinearLayout> 

ich meine Tabs nur sehen, wie beabsichtigt . Gemäß dem Quellcode für FragmentTabHost erstellt es TabWidget von selbst, wenn es in der Hierarchie der Ansichten nicht gefunden werden konnte. Also frage ich mich, ob ich TabWidget explizit in meiner Layout-Datei deklarieren sollte oder nicht.

Antwort

1

Nun, das von Ihnen beschriebene Verhalten ist nicht dokumentiert, daher besteht ein geringes Regressionsrisiko, wenn diese Funktion eines Tages fallen gelassen wird. Natürlich ist die TabWidget Kind auch nicht dokumentiert, da die Dokumentation für FragmentTabHost saugt.

Sie könnten auch die TabWidget in Ihr Layout einfügen, wenn Sie eine deklarative Kontrolle über einige XML-Attribute des TabWidget Renderings wünschen.

Andernfalls, wenn der standardmäßig generierte TabWidget für Sie arbeitet, können Sie ihn gerne verwenden.

+0

Danke für die schnelle und vollständige Antwort. Du hast recht. In der TabWidget- und FragmentTabHost-Dokumentation fehlen einige Details. –

Verwandte Themen