2012-04-05 67 views
0

我正在使用具有3個選項卡的TabHost。每個標籤都有一個圖片+文字。Android更改選項卡圖像(不是背景)

spec = tabHost.newTabSpec("MyTasks") 
      .setIndicator(Html.fromHtml("<b><H2>My Tasks</H2></b>"), getResources().getDrawable(R.drawable.task)) 
       .setContent(intent);  
    tabHost.addTab(spec); 

我想在選擇選項卡時更改圖像。我用下面的代碼來改變它...

TabWidget tw = getTabWidget(); 
    View leftTabView = tw.getChildAt(0); 
    leftTabView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab1_drawable)); 

tab1_drawable是一個XML(每個狀態的選擇器和項目)。這是設置和更改背景而不是我設置的圖像。我該如何改變它?

回答

1

而是通過代碼改變繪製的,爲什麼不使用state-list drawable?然後,您只需在選擇該選項卡時指定一個不同的可繪製對象。

例,ic_tab_tasks.xml:

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

然後,當你最初設置的標籤指示的繪製,只需使用狀態列表繪製。

+0

工作!謝謝一堆 – user1143989 2012-04-05 17:58:56

0

試試這個:

private int index_tab = 0; 
    private TabWidget tabWidget; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.index_layout);  
     TabHost t = (TabHost)findViewById(R.id.testhost); 
     t.setOnTabChangedListener(new OnTabChangeListener() { 
      @Override 
      public void onTabChanged(String tabId) { 
       tabChanged(tabId); 
      } 
     }); 
    } 
public void tabChanged(String tabId) { 
    if (index_tab != (Integer.valueOf(tabId) - 1)) { 
    tabWidget.getChildAt(Integer.valueOf(tabId) - 1) 
     .setBackgroundDrawable( 
     getResources().getDrawable(R.drawable.tab1_drawable)); 
     tabWidget.getChildAt(index_tab).setBackgroundDrawable(null); 
     index_tab = Integer.valueOf(tabId) - 1; 
    } 
} 
+0

好的。什麼是index_tab? – user1143989 2012-04-05 17:39:57

+0

看到我更新的答案'index_tab'是一個選項卡的計數器 – 2012-04-05 17:41:37

+0

抱歉,它不適用於我。 – user1143989 2012-04-05 17:58:38

相關問題