2

私のアクティビティでは、TabHostを設定するためにこれを行っています。

//...     
        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は単なる長方形です。

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

縦の仕切りが描かれています。しかし、タブの下のストリップは表示されていません...

何が問題なのですか?my_strip_tab?のサイズ

私はちょうどそれを見つけました:

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

ここで:TabWidgetExample

したがって、タブにカスタムビューを使用すると(私が行っているように)、ストリップは自動的に無効になります...どうすれば有効にできますか?

4

2 に答える 2

2

あなたがしなければならない唯一のことは、このコードのブロックを移動することです

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

結局、setupTab()

Googleのドキュメントを調べると、タブインジケーターにカスタムビューを使用すると、setStripEnabled(false)が自動的に呼び出されるためです。すべてのカスタムビューまたはタブインジケーターを設定した後、再度有効にする必要があります。

于 2012-08-14T01:50:06.857 に答える
1

この問題を解決するために私が見つけた唯一の解決策は次のとおりです。

//...
<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>
于 2012-04-14T17:38:15.973 に答える