J'utilise TabHost dans mon application, j'utilise quatre onglets dans mon application et je veux utiliser les différentes images dans TabHost lorsque l'onglet particulier est sélectionné et non sélectionné. Je dois utiliser différentes images pour un onglet particulier chacune.
Lorsque je sélectionne un onglet, l'image est peu lumineuse et lorsque je passe à un autre onglet, cette image lumineuse devient grisée.
J'ai implémenté le TabHost mais je ne sais pas comment changer les images dans le TabHost.
Quelqu'un peut-il m'aider à ce sujet.
Merci, David
Si vous souhaitez utiliser différentes images pour les états sélectionnés et non sélectionnés, créez des fichiers XML `` sélecteur '' dans votre dossier drawables pour chaque onglet, par ex. tab1_selector.xml, tab2_selector.xml qui devrait contenir les éléments suivants, remplaçant les références dessinables à vos images pour les états sélectionnés et non sélectionnés. c'est à dire.
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:state_selected="true"
Android:drawable="@drawable/tab1_selected_image" />
<item
Android:state_selected="false"
Android:drawable="@drawable/tab2_unselected_image" />
</selector>
Ensuite, en utilisant la méthode .setIndicator comme bharath l'a écrit ci-dessus, vous devez référencer votre nouvelle ressource drawable xml.
Tout d'abord, vous devez avoir les deux images, car vous voulez passer de l'une à l'autre, vous avez donc besoin des deux images et vous devez la placer sur les trois dossiers dessinables.
Dans mon exemple, je dois des images, une appelée icon1.png et icon2.png.
Après cela, créez un fichier xml dans les dossiers dessinables (le même fichier pour tous les dossiers dessinables). Voici le fichier:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- When selected, use icon1 -->
<item Android:drawable="@drawable/icon1"
Android:state_selected="true" />
<!-- When not selected, use icon2-->
<item Android:drawable="@drawable/icon2" />
</selector>
Vous pouvez choisir quelle image est celle qui apparaîtra lorsque l'onglet sera sélectionné. Dans ce cas, le icon1 apparaîtra, car nous l'avons déclaré sur la balise où state_selected = true.
Alors maintenant, vous avez les deux images et le fichier xml à l'intérieur des trois dossiers dessinables. D'accord!
Maintenant, dans la classe dans laquelle vous déclarez les onglets, ajoutez cette ligne pour chaque onglet que vous souhaitez ajouter.
tabHost.addTab(tabHost
.newTabSpec("one")
.setIndicator("The Tab",
res.getDrawable(R.drawable.yourxmlfile))
.setContent(new Intent(this, YourClass.class)));
N'oubliez pas que R.drawable.yourxmlfile correspond au fichier xml que vous avez créé dans les dossiers dessinables.
C'est tout! J'espère que cela vous aidera.
Pour définir le texte et l'icône, nous devons utiliser la propriété setIndicator.
tabSpec.setIndicator(Char,Drawable);
firstTabSpec.setIndicator("First Tab Name", getResources().getDrawable(R.drawable.logo));
secondTabSpec.setIndicator("Second Tab Name",getResources().getDrawable(R.drawable.logo));
utilisez ceci pour définir une image séparée pour chaque onglet
Créez un fichier xml de sélecteur tabicon.xml et mettez ce code
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/tab_enbled" Android:state_selected="true"/>
<item Android:drawable="@drawable/tab_default" Android:state_selected="false"/>
</selector>
allez maintenant dans votre TabActivity et mettez ce code
TabSpec MyTab = tabhost.newTabSpec("MyTab");
MyTab.setIndicator("", getResources().getDrawable(R.drawable.tabicon));
//note:if you give some text in setIndicator sometimes the icon will not be showed.
Intent tabIntent = new Intent(this, TabOne.class);
TWTTab.setContent(tabIntent);
Dans le tutoriel this TabLayout, différentes images sont utilisées lorsqu'un onglet est sélectionné et non sélectionné.
Fondamentalement, vous devez créer un Statelist drawable. Voici le code pour la même chose sur le site du développeur
<?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>
SetIndicator (CharSequence, Drawable) est également appelé pour définir le texte et l'icône de l'onglet.
ces codes montrent comment définir une icône dans l'onglet Hôte et également définir l'intention
TabHost tabHost = getTabHost();
// Tab for Photos
TabSpec photospec = tabHost.newTabSpec("Photos");
// setting Title and Icon for the Tab
photospec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_photos_tab));
Intent photosIntent = new Intent(this, PhotosActivity.class);
photospec.setContent(photosIntent);
// Tab for Songs
TabSpec songspec = tabHost.newTabSpec("Songs");
songspec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_songs_tab));
Intent songsIntent = new Intent(this, SongsActivity.class);
songspec.setContent(songsIntent);
// Tab for Videos
TabSpec videospec = tabHost.newTabSpec("Videos");
videospec.setIndicator("", getApplicationContext().getResources().getDrawable(R.drawable.icon_videos_tab));
Intent videosIntent = new Intent(this, VideosActivity.class);
videospec.setContent(videosIntent);
// Adding all TabSpec to TabHost
tabHost.addTab(photospec); // Adding photos tab
tabHost.addTab(songspec); // Adding songs tab
tabHost.addTab(videospec); // Adding videos tab
Vous pouvez utiliser ImageButton c'est mieux car une imageView peut être sélectionnée et non sélectionnée et l'ImageButton peut être sélectionné non sélectionné et pressé et d'autres ....
Si vous souhaitez modifier l'image de l'onglet par programme, alors:
ImageView yourImage= (ImageView)mTabHost.getTabWidget().getChildTabViewAt(youtTabPosition).findViewById(Android.R.id.icon);
yourImage.setImageResource(R.drawable.ic_more_vert_white_24dp);
@Suchismita, il vaut mieux utiliser TextView au lieu de TabActivity. J'ai rencontré ces problèmes suivants dans la tabulation
Je n'ai pas pu démarrer une autre activité dans le même onglet, c'est le problème majeur auquel j'ai été confronté
ensuite est la personnalisation de la vue de l'onglet, je ne pouvais pas changer le séparateur dessinable.
Ensuite, en utilisant TextView, j'ai trouvé qu'il est très facile de gérer les événements et le flux d'activité, ici Vous avez un contrôle total sur le comportement de l'application et vous pouvez également personnaliser l'apparence de l'onglet comme vous le souhaitez.
êtes-vous intéressé par la façon de mettre en œuvre?