TabHost指示灯颜色更改代码无效

时间:2014-05-03 05:54:28

标签: android indicator fragment-tab-host

我一直在阅读Stack以尝试更改指示器的颜色(选项卡的下划线,告诉您选择了哪个选项卡),但我使用的代码here,但它不会工作。我得到2个错误:

  1. view.findViewById(R.id.tabhost)中,视图和tabhost为红色(无法解析符号)。

  2. 一个是widget.getChildCount(),它说方法调用可能会产生空指针异常。

  3. 第三个错误是在v.setBackgroundResource(R.drawable.tab_selector_color);它说的相同,它可能会产生一个空指针异常。

  4. 我下载了所有的drawable并改变了它们的颜色,就像上面的链接一样,然后我将它们全部放在我的drawable-mdpi文件夹中,就像它建议的那样。

    我将发布我的主要活动的一部分,其中包含错误的代码块,以及tab_selector_color.xml,它位于我的drawable文件夹中(我认为它必须放在这里,而不是布局文件夹,因为它有selector个标签。)

    如何解决这些错误?在此先感谢,如果有任何不清楚的地方或者您需要查看更多文件,请告诉我。

    包含主要活动错误的方法:

    (我拿了下面的标题代码,因为我没有TextView任何地方(使用我的指示器可绘制部分的图标),但无论代码是否存在,3个错误仍然存​​在)。

    public void changeTabIndicators() {
            FragmentTabHost host = (FragmentTabHost)view.findViewById(R.id.tabhost);
            TabWidget widget = host.getTabWidget();
            for(int i = 0; i < widget.getChildCount(); i++) {
                View v = widget.getChildAt(i);
    
    //            // Look for the title view to ensure this is an indicator and not a divider.
    //            TextView tv = (TextView)v.findViewById(android.R.id.title);
    //            if(tv == null) {
    //                continue;
    //            }
                v.setBackgroundResource(R.drawable.tab_selector_color);
            }
        }
    

    tab_selector_color.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Non focused states -->
        <item android:state_focused="false"
            android:state_selected="false"
            android:state_pressed="false"
            android:drawable="@drawable/tab_unselected_holo" />
    
        <item android:state_focused="false"
            android:state_selected="true"
            android:state_pressed="false"
            android:drawable="@drawable/tab_selected_holo" />
    
        <!-- Focused states -->
        <item android:state_focused="true"
            android:state_selected="false"
            android:state_pressed="false"
            android:drawable="@drawable/tab_unselected_focused_holo" />
    
        <item android:state_focused="true"
            android:state_selected="true"
            android:state_pressed="false"
            android:drawable="@drawable/tab_selected_focused_holo" />
    
        <!-- Pressed -->
        <!--    Non focused states -->
        <item android:state_focused="false"
            android:state_selected="false"
            android:state_pressed="true"
            android:drawable="@drawable/tab_unselected_pressed_holo" />
    
        <item android:state_focused="false"
            android:state_selected="true"
            android:state_pressed="true"
            android:drawable="@drawable/tab_selected_pressed_holo" />
    
        <!--    Focused states -->
        <item android:state_focused="true"
            android:state_selected="false"
            android:state_pressed="true"
            android:drawable="@drawable/tab_unselected_pressed_holo" />
    
        <item android:state_focused="true"
            android:state_selected="true"
            android:state_pressed="true"
            android:drawable="@drawable/tab_selected_pressed_holo" />
    
    </selector>
    

1 个答案:

答案 0 :(得分:0)

实际上黄色警告(#2和3上的错误)不会导致问题,但我所做的更改是.getChildCount()方法。我在TabWidget Android pages查找了一下,但在那里找不到这个方法,所以我使用getTabCount()代替。要修复view中单词view.findViewById(R.id.tabhost)中的错误,我删除了view.并修复了该错误。

我还删除了TextView代码,因为我的标签不使用文本,而是使用小标签部分中的图标,所以我不需要整个方法(因为你可以看到它在我的代码中被注释掉了)

所以我想再次肯定,TabWidget current tab bottom line color主要适合我,即使从Github下载drawables需要永远,因为你必须下载整个父文件夹...但我做了,然后挑出我需要的,把它们放在正确的文件夹中,它工作了!另请注意,您必须将选项卡指示符xml(在答案中给出)放入drawable文件夹中,因为只要xml具有<selector>标记,这就是惯例。