2012-04-05 35 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

相关问题