我正在使用TabHost来开发我的应用程序,该应用程序中有四个选项卡,当特定选项卡被选中或未选中时,我希望在TabHost中使用不同的图像。我需要为每个特定选项卡使用两个不同的图像。
当我选择任何选项卡时,图像会变亮,当我切换到另一个选项卡时,那张明亮的图像会变成灰色的。
我已经实现了TabHost,但是我不知道如何更改TabHost中的图像。
有谁可以帮助我吗?
谢谢, david
我正在使用TabHost来开发我的应用程序,该应用程序中有四个选项卡,当特定选项卡被选中或未选中时,我希望在TabHost中使用不同的图像。我需要为每个特定选项卡使用两个不同的图像。
当我选择任何选项卡时,图像会变亮,当我切换到另一个选项卡时,那张明亮的图像会变成灰色的。
我已经实现了TabHost,但是我不知道如何更改TabHost中的图像。
有谁可以帮助我吗?
谢谢, david
如果您希望为选定和未选定状态使用不同的图像,则需要在drawable文件夹中为每个选项卡创建“selector” XML文件,例如tab1_selector.xml、tab2_selector.xml等,文件应包含以下内容,并将可绘制的引用替换为所需的选定和未选定状态的图像。
<?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.png,另一张名为icon2.png。
之后,在drawable文件夹中创建一个XML文件(所有drawable文件夹都使用相同的文件)。以下是该文件的内容:
<?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>
你可以选择哪个图像在选定标签时显示。 在这种情况下,icon1会出现,因为我们在state_selected=true的标签中声明了它。tabHost.addTab(tabHost
.newTabSpec("one")
.setIndicator("The Tab",
res.getDrawable(R.drawable.yourxmlfile))
.setContent(new Intent(this, YourClass.class)));
记住,R.drawable.yourxmlfile 对应于您在drawable文件夹中创建的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));
使用此方法为每个选项卡设置单独的图像。
<?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>
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);
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
<?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>
您可以使用ImageButton,因为它更好,因为ImageView可以被选择和未选择,而ImageButton可以被选择、未选择、按下等其他操作。
@Suchismita,你最好使用TextView而不是TabActivity。 我在TabActivity中遇到了以下问题:
我无法在同一选项卡中启动另一个活动,这是我遇到的主要问题
接下来是自定义选项卡视图,我无法更改分隔符可绘制对象。
接下来,使用TextView,我发现处理事件和活动流非常容易,在这里,您完全控制应用程序的行为,并且还可以根据需要自定义选项卡的外观和感觉。
你有兴趣知道如何实现吗?
ImageView yourImage= (ImageView)mTabHost.getTabWidget().getChildTabViewAt(youtTabPosition).findViewById(android.R.id.icon);
yourImage.setImageResource(R.drawable.ic_more_vert_white_24dp);