0

Je veux obtenir la structure de mise en page telle qu'elle apparaît sur l'image. Quoi que j'aie essayé, TabHost est toujours étalé sur Linear, en plein écran.Comment faire TabHost situé et ancré à l'intérieur d'un panneau, pas en plein écran

Cette structure physique a été modifiée plusieurs fois. J'ai essayé tout le poids et la gravité et match_parent, remplir parent ... tous font TabHost sur le dessus et le bas Linear n'est pas visible. Donc, si vous voyez des étiquettes fous, ne soyez pas surpris :)

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

    <TabHost 
     android:id="@+id/tabHost" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"> 

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

    </TabHost> 

    <LinearLayout 
     android:layout_weight="1" 
     android:background="@color/white" 
     android:layout_height="60dp" 
     android:layout_marginStart="0dp" 
     android:layout_marginTop="0dp" 
     android:layout_alignParentBottom="true" 
     android:layout_width="fill_parent"> 

     <Button 
      android:layout_width="100dp" 
      android:layout_height="fill_parent" 
      android:text="@string/finish_test" 
      android:id="@+id/finishTest" 
      android:background="@drawable/blueback" 
      android:layout_alignParentRight="true" 
      android:layout_gravity="right" 
      android:nestedScrollingEnabled="false" 
      android:onClick="onFinishClick" /> 
    </LinearLayout> 

    </RelativeLayout> 

Mais j'ai besoin que l'écran soit divisé en deux panneaux.

Panel 1 - zone pleine pour TabHost

Panel 2 - hauteur fixe et que pour cette linéaire.

Pls, aide.

P.S. Le bouton est considéré comme une partie de Lineat. Pls, ignorez-le.

enter image description here

Peut-être qu'il est aussi important de mentionner que les panneaux de l'onglet I remplir à partir du code. Et chaque onglet est une disposition d'activité.

je le fais de cette façon:

// on eCreate.. 

     TabHost mTabHost = (TabHost) findViewById(R.id.tabHost); 
     mTabHost.setup(getLocalActivityManager()); 
     try { 
      mTabHost.addTab(mTabHost.newTabSpec("tab0").setIndicator("title1", null).setContent(new Intent(this, HelloScreen.class))); 
      mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("title2", null).setContent(new Intent(this, BeginTest.class))); 
      mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("title3", null).setContent(new Intent(this, Second.class))); 
     } catch (Exception e) { 
      throw e; 
     } 

Puis-je cacher TabWidget .. et toujours ces onglets (avec activités à l'intérieur) occupent plein écran ..

Peut-être que je me trompe, mais pour moi Activité est comme une fenêtre dans Windows .. ou en termes de Winform.NET - Contrôle de l'utilisateur ou un WinForm ..

In.NET telle structure fonctionne parfaitement .. Je ne suis pas sûr de la façon dont l'Android gère les activités ..

+0

S'il vous plaît fournir un [mcve] montrant ce que vous avez essayé qui n'a pas fonctionné. 'TabHost' fonctionne parfaitement dans un' LinearLayout'; en fait, c'est comme ça que vous ajouteriez normalement le 'TabWidget'. – CommonsWare

+0

Ok, donnez-moi 10 minutes –

+0

Do, did, done .. –

Répondre

0

La réponse est masquée dans les paramètres de mise en page corrects et le type correct de mise en page. Vous pouvez utiliser Fragment ou Activity (ils sont obsolètes, mais je les ai trouvés plus faciles à implémenter, surtout si vous avez besoin de servir n'importe quelle vue (boutons, canevas, textes .. etc.) .. faites tout simplement "le groove" tube » comme vous le faites quand gérer une activité Ajout d'onglets - utiliser mon code ci-dessus ..

Mais les couches .. ils devraient être les suivants:.

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

    <TabHost 
     android:id="@+id/tabHost" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="vertical"> 

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

     </RelativeLayout> 
    </TabHost> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:background="@color/white" 
     android:layout_height="60dp" 
     android:layout_marginStart="0dp" 
     android:layout_marginTop="0dp" 
     android:layout_alignParentBottom="true" 
     android:layout_width="fill_parent"> 

     <Button 
      android:layout_width="100dp" 
      android:layout_height="fill_parent" 
      android:text="@string/your_text" 
      android:id="@+id/yourId" 
      android:layout_alignParentRight="true" 
      android:layout_gravity="right" 
      android:nestedScrollingEnabled="false" 
      android:onClick="onYourClick" /> 
    </LinearLayout> 
</LinearLayout> 

Pour masquer l'utilisation TabHost TabWidget:

mTabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE); 

Sur votre MainActivity eCreate ..

Et puis .. il suffit d'utiliser une méthode .. par bouton ou de code pour afficher le panneau Tab nécessaire, en utilisant setCurrentTab(# of you Tab);

solution très lisse ..