Java android更改所选选项卡的背景色

Java android更改所选选项卡的背景色,java,android,Java,Android,我来自objective-c,是一名Android新手。我正在使用下面的方法来更改索引0的tabColor。但我想在选中时更改默认的灰色选项卡。多谢各位 mTabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.CYAN); 在TabHost上使用setOnTabChangedListener(TabHost.OnTabChangeListener l): myTabHost.setOnTabChangedListener(n

我来自objective-c,是一名Android新手。我正在使用下面的方法来更改索引0的tabColor。但我想在选中时更改默认的灰色选项卡。多谢各位

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

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

也许有更简单的方法,我以前没有用过;)

Android允许一个StateList可绘制的xml文件,这是获得您想要的效果的理想方式

其思想是创建一个xml文件,该文件为每个状态声明不同的可绘制颜色(如果需要纯颜色,则为颜色)。然后,当您将状态列表作为视图的背景应用时,它将为您处理切换视图图像的“魔法”,这样您就不必担心从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”
,其中前两位数字是alpha,接下来的6位是所需颜色的十六进制值。

我刚刚更改了TabHost的标记

<?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>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@android:color/transparent">

我用这个解决了我的问题:

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

        }
    });

您是否尝试在选中时更改它,然后在未选中时将其切换回?现在,在按下tab键之前,仍保持相同的背景默认颜色。然后,始终保持青色。我设置了一个开关盒来控制按下哪一个,以返回默认颜色并工作,但当应用程序启动时,仍然是灰色的,按下第一次单击时默认为黄色:(for(int I=0;iThanks Tim,android:color=#“F121212”。但是xml有静态内容,我需要在活动中设置它。我以前从未这样做过,但您应该能够动态实例化它。请参阅此处的文档: