android设置桌面小部件背景,如何更改Android标签小部件的背景?

这篇博客讨论了如何更改Android TabActivity中的TabWidget背景颜色。通过使用TabHost.OnTabChangedListener并在事件中设置背景资源,或者使用XML选择器来实现不同状态下的背景颜色。还提到了在styles.xml中定义样式以及使用自定义视图来改变标签的外观。
摘要由CSDN通过智能技术生成

如何更改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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值