标签和图标是否在TabHost TabSpec setIndicator中互斥?

时间:2013-09-13 01:11:45

标签: android android-layout android-tabhost android-drawable fragment-tab-host

在Android应用程序(min sdk 11,target sdk 18)上,扩展Fragment的类应该创建带有一个标签和一个图标的TabHost选项卡(TabSpec)。但...

TabSpec ts1;
// if the label is set to "Home", the label is displayed but not the image
ts1 = tab_host.newTabSpec("TAB_ONE").setIndicator("Home", getActivity().getResources().getDrawable(R.drawable.ic_tabone)).setContent(R.id.edit_species_tab);

// if the label is null or empty, the image is displayed
ts1 = tab_host.newTabSpec("TAB_ONE").setIndicator(null, getActivity().getResources().getDrawable(R.drawable.ic_tabone)).setContent(R.id.edit_species_tab);

据我所见,documentation没有提到标签和图标是互斥的。

起初,我认为标签背后隐藏着图标,但实际情况并非如此。事实上,当我设置TabHost背景时,我可以看到标签是透明的:

tab_host.getTabWidget().setBackgroundResource(R.drawable.ic_mybackground);

如何设置TabSpec背景,以便为每个标签显示标签 AND 图标?

tab_host.xml

<TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />

<FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="65dp" >

    <LinearLayout
        android:id="@+id/edit_species_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/edit_regions_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/edit_quiz_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/edit_about_tab"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="5dp" >
    </LinearLayout>
</FrameLayout>

1 个答案:

答案 0 :(得分:5)

在holo主题中,标签仅支持标签或图标并且互斥。

在Holo之后,作为默认选项卡,假设只有标签,请检查设计指南。 http://developer.android.com/design/building-blocks/tabs.html

如果您愿意同时标注&amp;图标同时有两种选择。

选项1:使用旧的姜饼主题。设置你的android:targetSdkVersion 9或以下。 (在Honeycomb之前)

选项2:使用自定义布局&amp;查看您的标签。当然,它需要一些努力,但您可以使用您想要的任何自定义布局。例如:

在您的活动代码中:

    TabHost.TabSpec ts1;
    View tabView = getLayoutInflater().inflate(R.layout.custom_tab, tab_host, false);
    ts1 = tab_host.newTabSpec("TAB_ONE").setIndicator(tabView).setContent(R.id.edit_species_tab);
布局中的

:(无论你想要什么)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello"
    />
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher"
    />
</LinearLayout>