2010-10-12 55 views
0

Je souhaite pouvoir affecter différentes images à mes onglets dans le contrôle TabLayout selon que l'élément est sélectionné ou non. J'ai suivi le tutoriel sur le site Android mais ils ont fait l'exemple avec une seule image et pour cela cela fonctionne. Mais cela ne fonctionne pas pour le reste des onglets. Comment puis-je le faire fonctionner? Ceci est mon code:Didacticiel de mise en page d'onglet Android?

La principale activité:

public class Main extends TabActivity { 
    private Resources res; 
    private TabHost tabHost; 
    private TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    private Intent intent; // Reusable Intent for each tab 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // The IDs in main2 should be exactly like the current ones. 
     setContentView(R.layout.main2); 

     res = getResources(); // Resource object to get Drawables 
     tabHost = getTabHost(); // The activity TabHost 
     // Create an Intent to launch an Activity for the tab (to be reused) 
     intent = new Intent().setClass(this, Tab1.class); 

     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("artists").setIndicator("Artists", 
          res.getDrawable(R.drawable.ic_tab_artists_grey)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     // Do the same for the other tabs 
     intent = new Intent().setClass(this, Tab2.class); 
     spec = tabHost.newTabSpec("albums").setIndicator("Albums", 
          res.getDrawable(R.drawable.ic_tab_albums_grey)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, Tab3.class); 
     spec = tabHost.newTabSpec("songs").setIndicator("Songs", 
          res.getDrawable(R.drawable.ic_tab_songs_grey)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     tabHost.setCurrentTab(1); 
    } 
} 

Le principal xml:

<?xml version="1.0" encoding="UTF-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="5dp"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="5dp" /> 
    </LinearLayout> 
</TabHost> 

Le sélecteur pour le premier onglet:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/ic_tab_artists_grey" 
      android:state_selected="true" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/ic_tab_artists_white"/> 
</selector> 

Le sélecteur pour la deuxième tab:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/ic_tab_songs_grey" 
      android:state_selected="true" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/ic_tab_songs_white"/> 
</selector> 

etc. Mes images sont appelées ic_tab_songs_white, ic_tab_songs_grey, ic_tab_albums_white, ic_tab_albums_grey, ic_tab_artists_white, ic_tab_artists_grey.

Répondre

4

Le problème pourrait-il être que vous définissiez les arrière-plans des onglets comme les images que vous avez à la place des sélecteurs que vous avez définis? De votre texte, il n'est pas clair comment vous avez nommé les deux fichiers de sélecteur pour lesquels vous avez un exemple de code, mais votre code devrait se référer à ces fichiers, pas aux images réelles.

+0

Oui, c'est la bonne réponse. Je vous remercie :) –