2011-04-29 111 views
2

我正在使用TabHost formate進行應用,該選項卡以默認顏色顯示,是否可以將默認顏色更改爲我們自己的顏色。我從谷歌的一些想法,如何更改TabHost中的顏色

tabHost.setOnTabChangedListener(new OnTabChangeListener(){ 
    @Override 
    public void onTabChanged(String tabId) { 
     // TODO Auto-generated method stub 
     for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
      { 
       tabHost.getTabWidget().getChildAt(i).setBackgroundColor(R.color.transparent); //unselected 
      } 
      tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#000011")); // selected 
    } 

每當我這樣做我收到強制關閉錯誤。如果有人想改變背景顏色,請指導我。

+0

給logcat中的細節,並給上你得到你所定義的error.Have行color.xml中的透明顏色? – 2011-04-29 13:43:00

回答

7

你需要先處理與onTabChanged事件之前更改默認appearence

for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
    { 
    if (i == 0) tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FFFFFF")); 

    else tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#7392B5")); 
    }  

tabHost.setOnTabChangedListener(new OnTabChangeListener(){ 
@Override 
public void onTabChanged(String tabId) { 
    // TODO Auto-generated method stub 
    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
     { 
      tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parsecolor("#7392B5")); //unselected 
     } 
     tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#FFFFFF")); // selected 
} 
}); 
1

與視圖創建標籤:

final TabHost tabs = getTabHost(); 
tabs.setup(); 
final TabHost.TabSpec spec = tabs.newTabSpec("tag"); 
spec.setIndicator(View.inflate(this, R.layout.tab_view, null)); 
tabs.addTab(spec); 

定義你的選擇

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

<item android:state_pressed="true" > 
    <shape> 
     <gradient 
      android:endColor="#bbb" 
      android:centerColor="#999" 
      android:startColor="#ddd" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" /> 
     <corners 
      android:topLeftRadius="10dp" 
      android:bottomRightRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" 
      android:topRightRadius="10dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item android:state_selected="true" > 
    <shape> 
     <gradient 
      android:endColor="#888" 
      android:centerColor="#777" 
      android:startColor="#999" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" /> 
     <corners 
      android:topLeftRadius="10dp" 
      android:bottomRightRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" 
      android:topRightRadius="10dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item>   
    <shape> 
     <gradient 
      android:startColor="#eee" 
      android:centerColor="#aaa" 
      android:endColor="#ccc" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" /> 
     <corners 
      android:topLeftRadius="10dp" 
      android:bottomRightRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" 
      android:topRightRadius="10dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

您選擇作爲背景繪製添加到您的標籤視圖

<View 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="@dimen/tab_width" 
android:layout_height="fill_parent" 
android:background="@xml/tabs_background"/> 

"@dimen/tab_width"是您在dp,像素或smthn中的標籤寬度。

+0

您能否指定清楚在哪個目錄或文件中,您的每個代碼都需要放置以使應用程序能夠正常工作。謝謝 – 2011-04-29 14:37:52

+1

我沒有寫應用程序,我只寫了一些片段加上選擇器的完整代碼。 java部分應該在你的選項卡'Activity'中,選擇器應該是xml文件'tabs_background'(在這種情況下在'xml'文件夾中),並且該視圖應該在'layout'文件夾中。例如,您可以使用'50dp',而不是'@ dimen/tab_width'。 – ernazm 2011-04-29 14:42:37

+0

我沒有和我的項目上的xml文件夾。我有'drawables','res','values','values','layout'而不是'xml'。 – 2011-04-29 14:58:08