android更改选定的选项卡背景颜色

时间:2012-02-15 17:43:28

标签: java android

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

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

4 个答案:

答案 0 :(得分: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);
  }
});

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

答案 1 :(得分:2)

Android允许使用StateList drawable xml文件,这是获取您所需效果的预期方式。

read about it here

我们的想法是创建一个xml文件,为每个状态声明一个不同的drawable(或颜色,如果你想要纯颜色)。然后,当您将状态列表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,您只需将"@drawable/blahblah"更改为"#FF121212",前两位数字为alpha,接下来的6位为十六进制值你想要的颜色。

答案 2 :(得分:0)

我刚刚更改了TabHost的标记

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@android:color/transparent">

答案 3 :(得分: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) {

        }
    });