2012-04-12 9 views
2

In meiner Tätigkeit gezogen ich dies die TabHost Setup zu tun:Streifen unter dem Reiter nicht

//...  
     mTabHost = (TabHost) findViewById(android.R.id.tabhost); 
     mTabHost.getTabWidget().setDividerDrawable(R.drawable.my_divider_tab); 
     mTabHost.getTabWidget().setStripEnabled(true); 
     mTabHost.getTabWidget().setLeftStripDrawable(R.drawable.my_strip_tab); 
     mTabHost.getTabWidget().setRightStripDrawable(R.drawable.my_strip_tab); 
     setupTab(new TextView(this), getString(R.string.device_text_tab)); 
     setupTab(new TextView(this), getString(R.string.sensor_text_tab)); 
     setupTab(new TextView(this), getString(R.string.actuator_text_tab)); 
//... 

private void setupTab(final View view, final String tag) { 

    View tabview = createTabView(mTabHost.getContext(), tag); 
     TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory() { 
     public View createTabContent(String tag) {return view;} 
    }); 
    mTabHost.addTab(setContent); 
} 

private static View createTabView(final Context context, final String text) { 

    View view = LayoutInflater.from(context).inflate(R.layout.state_tabwidget, null); 
    TextView tv = (TextView) view.findViewById(R.id.tabsText); 
    tv.setText(text); 
    return view; 
} 

my_strip_tab.xml ist nur eine rechteckige Form:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid 
     android:color="#FFFFFF"/> 

    <size 
     android:width="0dp" 
     android:height="2dp"/> 
</shape> 

Der vertikale Teiler ist gezeichnet. Aber der Streifen unter den Tabs ist nicht gezeigt ...

Was könnte das Problem sein? Die Größe von my_strip_tab?

Ich fand nur, dass:

/** 
* Controls whether the bottom strips on the tab indicators are drawn or 
* not. The default is to draw them. If the user specifies a custom 
* view for the tab indicators, then the TabHost class calls this method 
* to disable drawing of the bottom strips. 
* @param stripEnabled true if the bottom strips should be drawn. 
*/ 

hier: TabWidgetExample

So scheint es, wie wenn wir benutzerdefinierte Ansicht für die Registerkarten verwenden (wie ich tue), wird das Band automatisch deaktiviert ... Wie kann ich es aktivieren?

Antwort

1

Die einzige Lösung, die ich dieses Problem zu lösen, wurde gefunden:

//... 
<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" > 


     <View 
      android:id="@+id/my_strip_tab" 
      android:layout_width="fill_parent" 
      android:layout_height="3dp" 
      android:background="@drawable/my_strip_tab"/> 

//... 

    </FrameLayout> 

my_strip_tab.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid 
     android:color="#67E667"/> 

</shape> 
+0

Ich hatte das gleiche Problem. Ich löste es, indem ich 1) meine setStrip-Zeilen unter dem Einrichten meines Tabstopps bewegte und 2) mein Zeichenfeld keine Größe festlegte. Funktioniert jetzt gut, dank Amp und @brian wang – kyle

2

Das einzige, was Sie tun müssen, ist dieser Block von Codes bewegen

mTabHost.getTabWidget().setStripEnabled(true); 
    mTabHost.getTabWidget().setLeftStripDrawable(R.drawable.my_strip_tab); 
    mTabHost.getTabWidget().setRightStripDrawable(R.drawable.my_strip_tab); 

nach all Ihren SetupTab()

Der Grund, wenn Sie in der Google-Dokumentation nachsehen, ist, wenn Sie benutzerdefinierte Ansichten für die Tab-Indikatoren verwenden, wird setStripEnabled (false) automatisch aufgerufen. Sie müssen es nur noch einmal aktivieren, nachdem Sie alle benutzerdefinierten Ansichten oder die Tab-Indikatoren eingerichtet haben.