如何更改Android标签小部件的背景?
我的课扩展了TabActivity
TabHost mTabHost = getTabHost();
TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1");
TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2");
tab1 .setIndicator("title tab1");
tab2 .setIndicator("title tab2");
mTabHost.addTab(tab1);mTabHost.addTab(tab2);
TabHost.setCurrentTab(0 or 1)
有人可以指导我如何更改所选标签的背景图像或颜色吗?
d-man asked 2020-02-22T20:14:33Z
6个解决方案
93 votes
这将设置您的标签颜色:
public static void setTabColor(TabHost tabhost) {
for(int i=0;i
tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected
}
tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
}
如果将其放在onTabChangedListener()中,它将为选定的选项卡保留正确的颜色。
Blundell answered 2020-02-22T20:15:11Z
36 votes
如mbaird所述,更好的解决方案是将背景与选择器一起使用,因此您不必检查styles.xml并进行手动更新。 最小的代码在这里:
private void initTabsAppearance(TabWidget tabWidget) {
// Change background
for(int i=0; i < tabWidget.getChildCount(); i++)
tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
}
其中styles.xml是可使用选择器绘制的xml:
对于完整的Tab自定义,我将添加用于使用自定义主题更改Tab文本样式的代码。 将此添加到styles.xml:
@style/CustomTabWidget
@style/CustomTabWidgetText
12sp
bold
要使用此主题,请在AndroidManifest.xml中对其进行定义:
现在,您有了具有自定义背景和自定义文本样式的选项卡小部件。
peter.bartos answered 2020-02-22T20:15:49Z
25 votes
如果您注册TabHost.OnTabChanged事件并调用mTabHost.getCurrentTabView()以获取View,然后调用view.setBackgroundResource()怎么办?
RickNotFred answered 2020-02-22T20:14:47Z
2 votes
这样可以解决您的问题吗? 基本上在每个选项卡视图上使用选择器调用setBackgroundDrawable吗?
Mark B answered 2020-02-22T20:16:09Z
2 votes
> TabHost mTabHost = getTabHost();
>
> TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1");
> TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2");
>
> tab1.setIndicator("title tab1");
> tab2.setIndicator("title tab2");
> mTabHost.addTab(tab1) ;mTabHost.addTab(tab2);
>
> TabHost.setCurrentTab(0 or 1);
mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector);
mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector);
mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector);
mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector);
使用.setBackgroundResource和tabNselector是XML-tabNselector.xml
Jamal answered 2020-02-22T20:16:29Z
0 votes
我在XML的TabWidget元素中设置了“ android:background”参数,以提供所有标签的通用背景。
然后,我在'.setIndicator'方法中传递了另一个XML的视图。
View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null);
TextView label = (TextView) v.findViewById(R.id.tabLabel);
label.setText("Whatever");
tab1 .setContent(v);
我觉得这是一种更好的方法。
Saad Farooq answered 2020-02-22T20:16:58Z