4

В приложении Android (min sdk 11, target sdk 18) класс, который расширяет фрагмент, должен создавать вкладки TabHost (TabSpec) с одной меткой и одним значком. Но ...Являются ли метки и значок взаимоисключающими в TabHost TabSpec setIndicator?

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 так, что и метка И значок отображается на каждой вкладке?

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> 

ответ

5

В голо теме, закладка поддерживают только ярлык или значок и взаимоисключающими.

После Holo, по умолчанию вкладка должна иметь только метку, пожалуйста, проверьте руководство по дизайну. http://developer.android.com/design/building-blocks/tabs.html

Если вы желаете одновременно обозначить как значок &, так и два варианта.

Вариант 1: Использование старой темы Gingerbread. Установите ваш Android: targetSdkVersion 9 или ниже. (До сота)

Вариант 2: Использование пользовательского макета & Представление для вашей вкладки. Конечно, это потребовало некоторых усилий, но вы можете использовать любой пользовательский макет, что хотите. Например:

в коде деятельности:

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> 
+0

Означает ли это, что каждая тема подменяет API, по-своему? Я хотел бы знать, на какую документацию я должен ссылаться, поскольку это спасет меня так много времени. – Javide

+0

Да. Это правда. Проверьте две разные версии LabelAndIconIndicatorStrategy в GrepCode. Для старого имбиря: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.1_r1/android/widget/TabHost.java#TabHost.LabelAndIconIndicatorStrategy Для ICS: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/TabHost.java#TabHost.LabelAndIconIndicatorStrategy Вы можете увидеть, что в версии ICS добавлен эксклюзивный флаг. – Chansuk