2

我试图改变TabWidget文本颜色,都没有成功,即使我已经尝试了不同的方式来改变它(见下面的代码)。文本颜色没有变化TabWidget

我的背景标签是图片:

for (int i = 0; i < tabHost.getTabWidget().getTabCount(); i++) { 
    tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.TRANSPARENT); 
} 

我不知道这是否与我现在想做的事情产生某种冲突。

解决方法1:

main.xml中

.... 
    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/tabbarbackground" 
     android:tabStripEnabled="false"    
     style="@style/TabText" 
     /> .... 

style.xml

... <style name="TabText"> 
    <item name="android:textColor">@color/tab_text_color</item> </style> .... 

tab_text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:textColor="#2daed9" /> 
    <item android:state_selected="false" android:color="#FFFFFF" /> 
</selector> 

解决方案2

for (int i = 0; i < tabHost.getTabWidget().getTabCount(); i++) { 
    tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.TRANSPARENT);   
    RelativeLayout rl = (RelativeLayout) tabHost.getTabWidget().getChildAt(i); 
    TextView textView = (TextView) rl.getChildAt(1); 
    textView.setTextColor(R.color.tab_text_color); 
} 

tab_text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:textColor="#2daed9" /> 
    <item android:state_selected="false" android:color="#FFFFFF" /> </selector> 

但既不解决方案工作。

但是,如果我的第二个解决方案

textView.setTextColor (R.color.tab_text_color); 

改变

textView.setTextColor (Color.parseColor ("# ....")); 

它的工作原理,但这种解决方案并不改变文本的颜色,当我点击它。

谢谢。

+0

在这里看到的是如何改变文字颜色更好的解决方案。 http://stackoverflow.com/questions/9982182/using-selector-to-change-textview-text-color/15498013#15498013! –

回答

6

我能解决,解决的办法是不优雅,但工程。我希望谁是为别人有用的:

首先,我必须设置初始化颜色所有选项卡的TextView的:

for (int i = 0; i < tabHost.getTabWidget().getTabCount(); i++) { 
    vg = (ViewGroup) getTabHost().getTabWidget().getChildAt(i); 
    tv = (TextView) vg.getChildAt(1); 
    tv.setTypeface(font); 
    if (i == 0) { 
     tv.setTextColor(Color.parseColor("#2daed9")); 
     Currentab = 0; 
    } else { 
     tv.setTextColor(R.color.GrisOscuro); 
    } 
} 

然后,我在重写方法设置ontabchanged,改变颜色为每个标签。脉冲标签是我(getTabHost()。getCurrentTab())。我按下的最后一个选项卡是Currentab。

getTabHost().setOnTabChangedListener(new OnTabChangeListener() { 
    public void onTabChanged(String tabId) { 
     int i = getTabHost().getCurrentTab(); 
     if (Currentab != i) { 
      vg = (ViewGroup) getTabHost().getTabWidget() 
        .getChildAt(Currentab); 
      tv = (TextView) vg.getChildAt(1); 
      tv.setTextColor(R.color.GrisOscuro); 

      Currentab = i; 
      vg = (ViewGroup) getTabHost().getTabWidget() 
        .getChildAt(i); 
      tv = (TextView) vg.getChildAt(1); 
      tv.setTextColor(Color.parseColor("#2daed9")); 
     } 
    } 
}); 

对不起,我希望对某人有用=)再见!; d

1

尝试写这梅索德:

public void onTabChanged(String tabId) { 

for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
{ 
TextView tv = (TextView) tabhost.getTabWidget() 
.getChildAt(i).findViewById(R.id.your_text_id); 
    tv.setTextColor(#FFFFFF); 

}

TextView tv = (TextView) tabHost.getTabWidget(). 
getChildAt(tabHost.getCurrentTab()).findViewById(R.id.your_text_id); 

tv.setTextColor(#2daed9); 
}  
+0

谢谢,但不会为我工作,因为我使用tabwidget没有textview和imageview上的XML ...我尝试做类似的事情,但我不能,因为我不能访问具体的选项卡,只有当我做了一个: 对于(int i = 0; i RomRuben

4

在你解决方案2

TabWidget tabwidget=mTabHost.getTabWidget(); 
for(int i=0;i<tabwidget.getChildCount();i++){ 
    TextView tv=(TextView) tabwidget.getChildAt(i).findViewById(android.R.id.title); 
    tv.setTextColor(this.getResources().getColorStateList(R.color.tab_text_xml)); 
} 
+0

不错,效果很好! – berserk