2009-04-21 3 views
17

Je sais comment mettre l'icône sur chaque onglet, ce n'est pas un problème. J'ai aussi couru à travers ceci: [Stack enfilez trop-plein sur à peu près même chose] [1]Android: Personnalisation des onglets sur l'état: Comment faire un sélecteur un drawable

J'ai suivi l'un des liens de cette question et trouvé [ce] [2]

Quasiment, il dit utiliser un sélecteur défini dans le XML, bien sûr, l'a fait. Mais il n'y a pas d'identifiant associé à cela, donc je ne suis pas sûr de savoir comment obtenir la fonction de sélection comme dessinable afin que je puisse l'utiliser comme icône pour les onglets. Peut-être que je vais à ce sujet dans le mauvais sens. Mais c'est ce que j'ai, et de toute évidence manquant quelque chose.

<selector 
    android:id="@+id/myselector" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states --> 
    <item 
     android:state_focused="false" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/darklogo" /> 
    <item 
     android:state_focused="false" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Focused states --> 
    <item 
     android:state_focused="true" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 
    <item 
     android:state_focused="true" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Pressed --> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/lightlogo" /> 
</selector> 

Dans mon code, un onglet exemple est généré en utilisant:

host.addTab(host.newTabSpec("three") 
       .setIndicator("map",drawables) 
       .setContent(new Intent(this, Map.class))); 

En ce moment étirables est juste une référence à une ressource d'image drawable. Comment puis-je rendre le sélecteur dessinable?

Voici ma question [1]: Updating Android Tab Icons [2]: http://groups.google.com/group/android-evelopers/browse_thread/thread/ef3bdebcb715b385

Répondre

20

Le XML que vous avez inclus ici est une façon de définir une zone de dessin qui vous permet d'intégrer une déclaration de cas. Il présente un dessin différent en fonction de l'état de la vue à laquelle elle est affectée. En tant que dessinable, vous devez l'enregistrer en tant que fichier xml dans le dossier res/drawable de votre projet (par exemple, tabselector.xml).

Pour l'utiliser pour Tabhost, vous devez construire le TabActivity comme vous le feriez normalement (comme illustré dans ce tutorial example).

Ensuite, lorsque vous ajoutez chaque onglet à l'hôte, spécifiez le tabselector comme indicateur comme indiqué pour «TAB 1» ci-dessous.

Drawable mySelector = getResources().getDrawable(R.drawable.tabselector); 

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1", mySelector).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

Note: Vous ne pouvez pas changer la couleur des arrière-plans onglet derrière les icônes à ce point.

+0

Comme d'habitude. Merci beaucoup. Je pense que ne pas avoir mon mon dossier drawable était mon plus gros problème. Merci d'avoir inclus du code pour me faire bouger .. Je l'apprécie. – Chrispix

+0

est-ce possible maintenant? je veux dire votre déclaration Note. vérifier ma question s'il vous plaît: http://stackoverflow.com/questions/2810075/customizing-tab-indicator-images-in-android – Praveen

1

Vous pouvez utiliser une vue comme un indicateur, de cette façon vous pouvez le personnaliser comme vous le souhaitez.

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(View MyView).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

Le premier onglet utilisera une vue comme indicateur et la seconde une séquence CharSequence. Jetez un oeil à la classe TabSpec réelle (http://developer.android.com/reference/android/widget/TabHost.TabSpec.html).

+0

Cela fonctionne à partir de la version Android 1.6. Ne l'oublie pas. –

Questions connexes