Comment modifier l’arrière-plan d’un widget de l’onglet Android?

Ma classe étend étend TabActivity

TabHost mTabHost = getTabHost(); TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); tab1 .setIndicator("title tab1"); tab2 .setIndicator("title tab2"); mTabHost.addTab(tab1);mTabHost.addTab(tab2); TabHost.setCurrentTab(0 or 1) 

Quelqu’un peut-il me guider comment changer l’image d’arrière-plan ou la couleur de l’onglet sélectionné?

Que faire si vous vous enregistrez pour les événements TabHost.OnTabChanged et appelez mTabHost.getCurrentTabView () pour obtenir la vue, puis view.setBackgroundResource ()?

Cela va définir les couleurs de votre onglet:

 public static void setTabColor(TabHost tabhost) { for(int i=0;i 

et si vous le placez dans onTabChangedListener (), il conservera la couleur correcte pour les tabs sélectionnés.

Comme mbaird l’a mentionné, la meilleure solution consiste à utiliser l’ arrière-plan avec le sélecteur, afin de ne pas avoir à vérifier onTabChanged et de procéder à une mise à jour manuelle. Le code minimal est ici:

 private void initTabsAppearance(TabWidget tabWidget) { // Change background for(int i=0; i < tabWidget.getChildCount(); i++) tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg); } 

tab_bg est un fichier XML avec un sélecteur:

     

Pour la personnalisation complète de l'onglet, j'appendai le code permettant de modifier le style de texte de l'onglet en utilisant un thème personnalisé. Ajoutez ceci à styles.xml :

      

Pour utiliser ce thème, définissez-le dans AndroidManifest.xml:

  

Et maintenant, vous avez des widgets d'onglet avec un arrière - plan personnalisé et un style de texte personnalisé .

Est- ce que cela résout votre problème? Appeler fondamentalement setBackgroundDrawable sur chaque onglet avec un sélecteur?

 > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); 

Utilisez .setBackgroundResource et tabNselector est un XML – tabNselector.xml

       

J’ai défini le paramètre ‘android: background’ dans l’élément TabWidget du fichier XML pour donner l’arrière-plan générique de tous les tabs.

Ensuite, j’ai passé des vues gonflées à partir d’un autre XML dans la méthode ‘.setIndicator’.

  View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null); TextView label = (TextView) v.findViewById(R.id.tabLabel); label.setText("Whatever"); tab1 .setContent(v); 

Je pense que c’est une meilleure façon de le faire.