ActionBar TabBar上的黑色

时间:2014-10-02 13:57:51

标签: android android-fragments tabs android-actionbar tabbar

我的头发是关于我的应用程序中仅在Android 4.1.2(真实设备)上发生的奇怪的UI错误。

错误是活动标签上的背景颜色为黑色(见下面的截图) 它应该是:活动(选定)选项卡的白色背景颜色和未选择的非活动选项卡的灰色背景。

虽然在我的styles.xml文件中,当选项卡处于活动状态时,我清楚地设置了一个带有白色背景的状态列表,并且它在Android 4.2.2及更高版本上完美运行。

enter image description here

这是我的styles.xml:

<!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Holo.Light">
        <!-- Customize your theme here. -->
        <item name="android:actionBarStyle">@style/MyActionBar</item>


        <item name="android:actionBarTabTextStyle">@style/TabText</item>

        <!-- This is a White background -->
        <item name="android:actionBarTabBarStyle">@style/TabBar</item>


        <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>



    </style>

styles.xml中标签栏的自定义:

<style name="TabBar" parent="android:style/Widget.Holo.Light.ActionBar.TabBar">
        <!-- This is a White background -->
        <item name="android:background">@color/white</item>
    </style>


    <!-- ActionBar tabs styles -->
    <style name="MyActionBarTabs" parent="android:style/Widget.Holo.Light.ActionBar.TabView">
        <!-- tab indicator -->
        <item name="android:background">@drawable/tab_bar_background</item>
    </style>


    <style name="TabText" parent="android:style/Widget.Holo.Light.ActionBar.TabText">
        <!-- This is a WHITE tab color -->
        <item name="android:textColor">@color/selector_tab_text</item>
        <item name="android:textAllCaps">false</item>
    </style>

这是我的:tab_bar_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- UNSELECTED TAB STATE -->
    <item android:state_selected="false" android:state_pressed="false">
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Bottom indicator color for the UNSELECTED tab state -->
            <!-- Tab background color for the SELECTED tab state -->
            <item>
                <shape>
                    <solid android:color="#d0d0d0"/>
                </shape>
            </item>

        </layer-list>
    </item>
    <!-- SELECTED TAB STATE -->
    <item android:state_selected="true" android:state_pressed="false">
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Tab background color for the SELECTED tab state -->
            <item>
                <shape>
                    <solid android:color="@color/white"/>
                </shape>
            </item>
            <!-- Bottom indicator color for the SELECTED tab state -->
            <item android:top="-5dp" android:left="-5dp" android:right="-5dp">
                <shape android:shape="rectangle">
                    <stroke android:color="#309CB9" android:width="3dp"/>
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

我在我的活动中添加选项卡,它扩展了FragmentActivity并实现了TabListener,如下所示:

//sets the tabs
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

正如我所提到的,此代码在Android版本4.2.2(选定选项卡的白色背景)上完美运行

我错过了什么吗?

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

这是您的底部指示灯颜色:

<item android:top="-5dp" android:left="-5dp" android:right="-5dp">
            <shape android:shape="rectangle">
                <stroke android:color="#309CB9" android:width="3dp"/>
            </shape>
        </item>

您需要添加一个实心的透明填充,它会解决问题,如下所示:

<item android:top="-5dp" android:left="-5dp" android:right="-5dp">
            <shape android:shape="rectangle">
               **<solid android:color="@android:color/transparent"/>** 
               <stroke android:color="#309CB9" android:width="3dp"/>
            </shape>
        </item>

答案 1 :(得分:0)

有些三星设备的颜色搞砸了。你在测试吗?如果是这样,请尝试将所选标签的颜色从白色更改为黑色。

答案 2 :(得分:0)

谢谢大家的帮助。 我设法让我的标签栏正常工作,用这个代码替换我的列表drawable(谷歌android版权):

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

这里有drawable(xxhdpi) https://github.com/android/platform_frameworks_base/tree/master/core/res/res/drawable-xxhdpi (谷歌的代码和可绘制的)

回到自己的问题: 为什么相同的旧代码在某些设备上工作而不在其他设备上,这仍然是个谜。

在关闭主题之前要添加的一件事:通过从旧列表中删除这部分代码,它可以工作=选定(激活)选项卡上的白色背景,但当然没有SELECTED选项卡状态的底部指示颜色! / p>

<item android:top="-5dp" android:left="-5dp" android:right="-5dp">
                <shape android:shape="rectangle">
                    <stroke android:color="#309CB9" android:width="3dp"/>
                </shape>
            </item>

我认为在同一个图层列表中有两个项目会破坏某些内容并在某些设备上创建错误的行为&#34;&#34;前4.2.x