0

Я уже настроил свой цвет фона в виде фона, но он не работает.Android - tabhost не меняет цвет фона

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item> 
    <item name="actionBarTabStyle">@style/ActionBarTabStyle</item> 
</style> 

<style name="ActionBarTabStyle" 
    parent="@style/Widget.AppCompat.ActionBar.TabView"> 
    <item name="android:background">@drawable/tab_bg_selector</item> 
    <item name="background">@drawable/tab_bg_selector</item> 
</style> 

tab_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/blueLight" android:state_pressed="true"/> 
    <item android:drawable="@color/blueLight" android:state_selected="true"/> 
    <item android:drawable="@color/blueDark"/> 
</selector> 

bottom_tabs.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/realtabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

    <android.support.v4.app.FragmentTabHost 
     android:id="@android:id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     > 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:layout_weight="0" /> 
    </android.support.v4.app.FragmentTabHost> 

</LinearLayout> 

Мольба совет. Спасибо.

+0

Вы используете библиотеку AppCompat? – shkschneider

+0

да, скомпилируйте 'com.android.support:appcompat-v7:22.1.0' –

+0

вы можете опубликовать код для tabvew –

ответ

0

Если вы OK, чтобы изменить цвет в коде, чем вы можете попробовать это:

tabHost.setOnTabChangedListener(new OnTabChangeListener() { 
    public void onTabChanged(String arg0) { 
     for (int i = 0; i < tab.getTabWidget().getChildCount(); i++) { 
      tab.getTabWidget().getChildAt(i) 
       .setBackgroundResource(R.drawable.tab_selected); // unselected 
     } 

     tab.getTabWidget().getChildAt(tab.getCurrentTab()) 
      .setBackgroundResource(R.drawable.tab_unselected); // selected 
    } 
}); 
+0

Я не могу реализовать OnTabChangeListener, потому что я использую ActionBarActivity, а не TabActivity –

0

Поскольку вы используете библиотеку AppCompat, используйте:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item> 
    <item name="actionBarTabStyle">@style/ActionBarTabStyle</item> 
</style> 

<style name="ActionBarTabStyle" 
     parent="@style/Widget.AppCompat.ActionBar.TabView"> 
    <item name="android:background">@drawable/tab_bg_selector</item> 
    <item name="background">@drawable/tab_bg_selector</item> 
</style> 

Вы нуждались в Widget.AppCompat.ActionBar.TabView родителей и android: вариантов поддержки AppCompat.

Это соответствует ActionBar's documentation и ActionBar Tab's documentation.

+0

Это не работает, проверьте мой отредактированный вопрос. –

+0

Да, у вас также был «ActionBarTabStyle». Он должен иметь 'Widget.AppCompat.ActionBar.TabView' как родительский, а не' android: Widget.ActionBar.TabView'. Повторите попытку :) – shkschneider

+0

Все еще не работает, я уже обновляю вопрос. –

0

Вы можете попробовать:

tab_selector.xml

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

    <!-- Non focused states --> 
    <item android:drawable="@drawable/unselected_tab" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/button_buynow" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/> 
    <!-- Focused states --> 
    <item android:drawable="@drawable/unselected_tab" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/selected_tab" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/> 
    <!-- Pressed --> 
    <!-- Non focused states --> 
    <item android:drawable="@drawable/unselected_tab" android:state_focused="false" android:state_pressed="true" android:state_selected="false"/> 
    <item android:drawable="@drawable/button_buynow" android:state_focused="false" android:state_pressed="true" android:state_selected="true"/> 
    <!-- Focused states --> 
    <item android:drawable="@drawable/unselected_tab" android:state_focused="true" android:state_pressed="true" android:state_selected="false"/> 
    <item android:drawable="@drawable/button_buynow" android:state_focused="true" android:state_pressed="true" android:state_selected="true"/> 

</selector> 

После объявления в вас MainActivity, вы можете использовать следующий код:

TabWidget widget = th.getTabWidget(); 

    for (int i = 0; i < widget.getChildCount(); i++) { 
     View v = widget.getChildAt(i); 
     v.setBackgroundResource(R.drawable.tab_selector); 
    } 
+0

то, что я хочу, это цвет фона смены, а не фоновое изображение. –

+0

TextView tv = (TextView) th.getTabWidget().getChildAt (1) \t \t \t \t .findViewById (android.R.id.title); // Unselected Tabs \t \t \t \t tv.setBackgroundColor (getResources(). GetColor (R.color.TransparentColor)); – BSavaliya

+0

Извините, я не совсем понимаю. –

0

В вашей теме, добавить следующие

<item name="android:actionBarStyle">@style/MyActionBar</item> 
<item name="actionBarStyle">@style/MyActionBar</item> 

Затем добавьте MyActionBar стиль (заменить Drawable записи с вашим собственным):

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
    <!-- action bar background --> 
    <item name="background">@drawable/ab_solid_mytabhost</item> 
    <!-- needed for 'stacked' & 'split' action bar (used by tabhost) --> 
    <item name="backgroundStacked">@drawable/ab_stacked_solid_mytabhost</item> 
    <item name="backgroundSplit">@drawable/ab_bottom_solid_mytabhost</item> 
</style> 

Ваш styles.xml должен выглядеть примерно так:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item> 
    <item name="actionBarTabStyle">@style/ActionBarTabStyle</item> 
</style> 

<style name="ActionBarTabStyle" parent="@style/Widget.AppCompat.ActionBar.TabView"> 
    <item name="android:background">@drawable/tab_bg_selector</item> 
    <item name="background">@drawable/tab_bg_selector</item> 
    <!-- add these --> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
</style> 

<!-- add this--> 
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
    <!-- action bar background --> 
    <item name="background">@drawable/ab_solid_mytabhost</item> 
    <!-- needed for 'stacked' & 'split' action bar (used by tabhost) --> 
    <item name="backgroundStacked">@drawable/ab_stacked_solid_mytabhost</item> 
    <item name="backgroundSplit">@drawable/ab_bottom_solid_mytabhost</item> 
</style> 

Для рабочего образца, вот ссылка к образцу проекта: https://github.com/ebernie/MyTabHostThemeSample

Смежные вопросы