如何更改TabHost中的选项卡图像

我在我的应用程序中使用TabHost,我在我的应用程序中使用了四个选项卡,并且当特定选项卡被选中并且未选中时,我想在TabHost中使用不同的图像。 我需要使用不同的图像为每个特定的选项卡。

当我select任何选项卡的图像是一点亮,当我切换到另一个标签,明亮的图像变成灰色阴影。

我已经实现了TabHost,但我不知道如何更改TabHost中的图像。

任何人都可以帮助我

谢谢,大卫

如果您希望为选定状态和未选定状态使用不同的图像,请为每个选项卡在drawables文件夹中创build“select器”XML文件,例如tab1_selector.xml,tab2_selector.xml,其中应包含以下内容,将可绘制引用replace为图像对于选定和未select的状态。 即

<?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> 

然后使用上面写的bharath的.setIndicator方法,你应该引用你的新的XML可绘制资源。

首先,你必须有两个图像,因为你想从一个到另一个,所以你需要这两个图像,你必须把它放在三个可绘制的文件夹。

在我的例子中,我必须有图像,一个叫做icon1.pngicon2.png

之后,在可绘制文件夹内创build一个xml文件(所有可绘制文件夹的文件相同)。 这是文件:

 <?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> 

您可以select在select标签时出现的图像。 在这种情况下, icon1会出现,导致我们在state_selected = true的标签上声明它。

所以现在,你有两个图像和三个可绘制文件夹内的XML文件。 好!

现在,在类中声明选项卡,为每个要添加的选项卡添加此行。

 tabHost.addTab(tabHost .newTabSpec("one") .setIndicator("The Tab", res.getDrawable(R.drawable.yourxmlfile)) .setContent(new Intent(this, YourClass.class))); 

请记住, R.drawable.yourxmlfile对应于您在可绘制文件夹中创build的xml文件。

而已! 希望这可以帮助你。

要设置文本和图标,我们需要使用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)); 

使用它为每个选项卡设置单独的图像

创build一个select器xml文件tabicon.xml并把这个代码

 <?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> 

现在去你的TabActivity并把这个代码

 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); 

在这个 TabLayout教程中,当select了一个Tab并且没有被选中时,使用不同的图像。

基本上你必须创build一个可绘制的状态列表。 以下是来自开发者网站的代码

 <?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)被调用来设置标签的文本和图标。

此代码显示如何在标签主机中设置图标并设置意图

  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 

你可以使用ImageButton更好,因为一个ImageView可以被选中,而不是select和ImageButton可以被选中,没有select和按下,其他….

@Suchismita更好地使用TextView而不是TabActivity。 我在Tabactivity面临以下问题

  • 我无法在同一个选项卡中启动另一个活动,这是我面临的主要问题

  • 接下来是定制选项卡的视图,我无法改变分区绘制。

  • TabActivity在ICS中已弃用

接下来使用TextView,我发现它很容易处理事件和活动stream,在这里你可以完全控制应用程序的行为,也可以自定义选项卡的外观和感觉,但是你想要的。

你有兴趣如何实施?

如果你想以编程方式改变标签的图像,那么:

 ImageView yourImage= (ImageView)mTabHost.getTabWidget().getChildTabViewAt(youtTabPosition).findViewById(android.R.id.icon); yourImage.setImageResource(R.drawable.ic_more_vert_white_24dp);