未选中时Android选项卡背景不会更改

未选中时Android选项卡背景不会更改,android,colors,background,tabs,Android,Colors,Background,Tabs,我需要改变一个标签的背景一旦选定设置未选定的标签背景颜色回到原来的一个。 出于某种原因,只有在IE之后单击另一个选项卡,背景才会改变: 我按下第一个标签-正确的颜色。 按下第二个选项卡-第一个选项卡保持高亮显示的颜色,第二个选项卡也高亮显示。 按下第三个按钮-第一个按钮恢复正常,第二个按钮仍高亮显示,第三个按钮也高亮显示 这是我的表格和我的一个标签,它们都是相同的设计 <android.support.design.widget.TabLayout android:id="@+id

我需要改变一个标签的背景一旦选定设置未选定的标签背景颜色回到原来的一个。 出于某种原因,只有在IE之后单击另一个选项卡,背景才会改变: 我按下第一个标签-正确的颜色。 按下第二个选项卡-第一个选项卡保持高亮显示的颜色,第二个选项卡也高亮显示。 按下第三个按钮-第一个按钮恢复正常,第二个按钮仍高亮显示,第三个按钮也高亮显示

这是我的表格和我的一个标签,它们都是相同的设计

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#dbdbdb"
    app:tabPaddingBottom="-1dp"
    app:tabPaddingEnd="-1dp"
    app:tabPaddingStart="-1dp"
    app:tabPaddingTop="-1dp"
    app:tabBackground="@drawable/tabs_background_colors"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true" >
    android:background="@android:color/darker_gray" >
    <android.support.design.widget.TabItem
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:icon="@drawable/reservation_w"
        android:id="@+id/tab_reservation"
        android:layout="@layout/tab_item_with_icon"
        android:layout_weight="1" />
此外,这是选项卡的状态xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/tab_background_selected" android:state_selected="true"/>
<item android:drawable="@color/tab_background_unselected" android:state_selected="false"/>
如果我对我的演示不太清楚的话,它看起来是怎样的


提前感谢:

您的第一个xml包含错误。检查android:background属性。在UI线程上运行方法tab.setIconicon

YourActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        tab.setIcon(icon);
    }
});

显然它看起来像一只虫子。。。但是在ontabonselect中设置图标将使其不会改变背景。。。不知道为什么,如果有人能解释,我会很高兴的

无论如何,如果您陷入这种混乱,解决方法是不更改ontabonselect中的图标,而只更改onTabSelect事件中的图标。 我所做的是将未选中选项卡的位置从ontabonselect保存为全局int

@Override
        public void onTabUnselected(TabLayout.Tab tab) {
            unselectedTabPosition = tab.getPosition();
        }
然后更改屏幕上的图标-

@Override
        public void onTabSelected(TabLayout.Tab tab) {

            changeToGrayIcon(unselectedTabPosition);

希望这能节省我在这方面浪费的时间。

谢谢你的背景提示,我没有看到它:但问题是我的背景没有改变,图标改变得很好,据我所知,我已经在主线程上改变了它们。
@Override
        public void onTabUnselected(TabLayout.Tab tab) {
            unselectedTabPosition = tab.getPosition();
        }
@Override
        public void onTabSelected(TabLayout.Tab tab) {

            changeToGrayIcon(unselectedTabPosition);