0

3つのタブがあるTabHostを使用しています。各タブには画像とテキストがあります。

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(各状態のセレクターとアイテム)です。これは、私が設定した画像ではなく、背景を設定および変更しています。どうすれば変更できますか?

4

2 に答える 2

1

ドローアブルをコードで変更する代わりに、状態リストのドローアブルを使用してみませんか?次に、タブが選択されたときに、タブに別のドローアブルを指定するだけです。

例、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>

次に、タブインジケーターのドローアブルを最初に設定するときは、状態リストドローアブルを使用します。

于 2012-04-05T17:36:37.503 に答える
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;  
    }  
} 
于 2012-04-05T17:36:02.297 に答える