安卓如何更改选中标签的背景颜色?

3

我来自Objective-C,是一个Android新手。我正在使用以下方法,旨在更改索引0的选项卡颜色。但我想在选中时更改默认的灰色选项卡。谢谢。

mTabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.CYAN);

你是想在选中时更改它,然后在取消选中时将其切换回来吗? - FoamyGuy
4个回答

5
使用TabHost的setOnTabChangedListener(TabHost.OnTabChangeListener l)方法:
myTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener(){
  @Override
  public void onTabChanged(String tabId) {
    int tab = myTabHost.getCurrentTab();
    myTabHost.getTabWidget().getChildAt(tab).setBackgroundColor(Color.CYAN);
  }
});

也许有一种更简单的方法,我之前没有使用过它 ;)

现在,仍然具有相同的背景默认颜色,直到按下选项卡。然后,始终保持青色。我设置了一个开关来控制哪个被按下以返回默认颜色并工作,但当应用程序启动时,仍然是灰色的,第一次点击是黄色默认。 - Jaume
for(int i=0;i<mTabHost.getTabWidget().getChildCount();i++),在onTabChanged()中实现解决。谢谢。 - Jaume

2
安卓允许使用StateList drawable xml文件来实现您想要的效果,这是预期的方式。 在此阅读有关它的内容 您需要创建一个xml文件,为每个状态声明不同的drawable(或颜色,如果您只需要纯色)。然后,当您将该statelist drawable应用为View的背景时,它会处理“魔法”,自动切换视图图像,因此您无需担心从java代码手动进行切换。
因此,您的代码片段应如下所示:
myTabHost.getTabWidget().getChildAt(tab).setBackgroundResource(R.drawable.your_state_list_filename);

这是一个我在按钮上使用的状态列表文件示例。您可以将其复制到drawables文件夹中的xml文件中,然后修改它以使用您想要的任何状态和图像。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true"
       android:drawable="@drawable/darkblue1" /> <!-- pressed -->
 <item android:state_focused="true"
       android:drawable="@drawable/darkblue1" /> <!-- focused -->
 <item android:drawable="@drawable/lightblue1" /> <!-- default -->
 </selector>

我认为(但不确定)如果要使用颜色而非可绘制对象,您只需将"@drawable/blahblah"更改为"#FF121212",其中前两个数字是透明度,后面6个数字是所需颜色的十六进制值。

谢谢Tim,android:color = #"F121212"。但是XML具有静态内容,我需要在活动中设置它。 - Jaume
我以前从未这样做过,但你应该也能够动态地实例化它。在这里查看文档:http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html - FoamyGuy

0

我用过这个来解决我的问题:

    tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            tabs.setSelectedIndicatorColors(Color.RED);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

0
我刚刚修改了TabHost的标记。
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@android:color/transparent">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接