2012-02-15 6 views
2

Je suis venu de l'objectif-c et je suis un utilisateur débutant Android. J'utilise la méthode suivante qui a l'intention de changer tabColor pour l'index 0. Mais je voudrais changer l'onglet gris par défaut lorsqu'il est sélectionné. Je vous remercie.android changer l'onglet sélectionné couleur de fond

mTabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.CYAN); 
+0

Êtes-vous essayer de le changer quand il est sélectionné, puis mettez-le de retour quand il devient non sélectionné? – FoamyGuy

+0

oui il est prévu comme ceci – Jaume

Répondre

5

Utilisez setOnTabChangedListener (TabHost.OnTabChangeListener l) sur le TabHost:

myTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){ 
    @Override 
    public void onTabChanged(String tabId) { 
    int tab = myTabHost.getCurrentTab(); 
    myTabHost.getTabWidget().getChildAt(tab).setBackgroundColor(Color.CYAN); 
    } 
}); 

Peut-être il y a une façon plus simple, je n'ai pas l'utiliser avant;)

+0

maintenant, ayant toujours la même couleur de fond par défaut jusqu'à ce que l'onglet est pressé. Ensuite, reste toujours cyan. J'ai mis un commutateur pour contrôler lequel est pressé afin de revenir à la couleur par défaut et fonctionne mais quand l'application démarre, toujours gris et le premier clic est jaune par défaut quand on appuie :( – Jaume

+0

pour (int i = 0; i Jaume

2

Android permet une StateList fichier XML dessinable qui est le moyen prévu pour obtenir l'effet que vous recherchez.

read about it here

L'idée est que vous faites un fichier xml qui déclare un autre drawable (ou couleur si vous voulez des couleurs unies) pour chaque état. Ensuite, lorsque vous appliquez cette statistique pouvant être dessinée en tant qu'arrière-plan de votre vue, elle gérera la "magie" de changer votre image de vue pour que vous n'ayez pas à vous soucier de la faire manuellement à partir du code Java.

de sorte que votre extrait de code ressemblerait à quelque chose comme ceci:

myTabHost.getTabWidget().getChildAt(tab).setBackgroundResource(R.drawable.your_state_list_filename); 

Voici un exemple d'un fichier de liste d'état que je l'ai utilisé sur un bouton. Vous pouvez copier ceci dans un fichier xml dans votre dossier drawables, puis le modifier pour utiliser les états et les images que vous voulez.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
     android:drawable="@drawable/darkblue1" /> <!-- pressed --> 
<item android:state_focused="true" 
     android:drawable="@drawable/darkblue1" /> <!-- focused --> 
<item android:drawable="@drawable/lightblue1" /> <!-- default --> 
</selector> 

Je pense (mais je ne suis pas certain) que d'utiliser des couleurs au lieu de dessinables vous souhaitez simplement changer "@drawable/blahblah"-"#FF121212" où les deux premiers chiffres sont alpha, et les 6 suivants sont la valeur hexadécimale de la couleur que vous voulez .

+0

Merci Tim, android: couleur = # "F121212" Mais le xml a un contenu statique, je dois le mettre dans l'activité – Jaume

+0

I ' Je ne l'ai jamais fait auparavant, mais vous devriez être en mesure de l'instancier de manière dynamique aussi.Voir les documents ici: http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html – FoamyGuy

0

Je viens de modifier le balisage du TabHost

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
     android:background="@android:color/transparent"> 
0

Je l'ai utilisé celui-ci pour résoudre mon problème:

tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      tabs.setSelectedIndicatorColors(Color.RED); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    });