如何为tabwidget按钮设置禁用状态,最好使用xml

时间:2013-08-28 13:15:33

标签: android android-layout tabwidget

我遇到以下问题。我想为tabbuton禁用状态添加特殊图像,但它不起作用。这就是我在选择器中所做的。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/active" android:state_pressed="true"/>
<item android:drawable="@drawable/unactive" android:state_selected=true"/>
<item android:drawable="@drawable/disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/unactive"/>

</selector>

这与单个“独立”按钮的选择器完全相同,但它不起作用,即使启用了按钮,它也会显示禁用状态。我做错了什么?

编辑:感谢@NightCrawler sugestions我发现这是主动非活动状态的最佳选择器,但是当按钮被禁用时,我仍然无法使state_enabled =“false”显示不同状态......

<item android:drawable="@drawable/active" android:state_selected="true"/>
<item android:drawable="@drawable/unactive" android:state_selected="false"/>
<item android:drawable="@drawable/disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/unactive"/>

替代方法:我继续在代码中使用以下方法实现禁用状态的映像更改:

tabWidget.getChildAt(4).setEnabled(true);
icon = (ImageView) wrapper.tabWidget.getChildAt(4).findViewById(R.id.icon);
icon.setImageResource(R.drawable.enabled)

tabWidget.getChildAt(4).setEnabled(false);
icon = (ImageView) wrapper.tabWidget.getChildAt(4).findViewById(R.id.icon);
icon.setImageResource(R.drawable.disabled)

这确实可行,但我仍然想知道是否可以使用ONLY XML在tabwidget中为按钮定义禁用状态。

结果: 因此,经过更多的修修补补,我发现为什么禁用状态未注册。在我的情况下,我使用按钮的自定义布局,这可能是任何定制tabhost的人会做的,并且可能会在该布局中有某种图像。使用上面定义的状态绘制的图形将应用于布局中的该图像,而不是整个布局。即使这个选择器足以有3个所需的状态:

<item android:drawable="@drawable/menu_network_active" android:state_selected="true"/>
<item android:drawable="@drawable/menu_network_offline" android:state_enabled="false"/>
<item android:drawable="@drawable/menu_network_unactive"/>

但是当你禁用tabwidget按钮时,你必须手动将你正在使用的图像设置为禁用,如下所示:

wrapper.tabWidget.getChildAt(0).setEnabled(false);
icon = (ImageView) wrapper.tabWidget.getChildAt(0).findViewById(R.id.icon);
icon.setEnabled(false);

在这种情况下,在图像上触发禁用的选择器状态,并显示所需的背景。

仍然没有解释:

这个谜题中唯一遗漏的是为什么在选择了tabbutton而不是禁用状态时触发了图像的选定状态。我甚至尝试在“图标”上设置监听器,以查看是否可能在更改选项卡时调用这些选项但是没有发生,并且选择器中的静止图像设置为已选中。所以基本上选择是在布局中的图像上触发(不知何故)但是禁用不是,我不明白为什么。 如果有人在查看此问题时有一些调查结果,请添加评论或答案以获取功能参考。 对于那些只想解决类似错误的人来说,只需阅读WOKRAROUND或FINDINGS部分,因为这些部分可能会为您解决。

1 个答案:

答案 0 :(得分:3)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Non focused states -->
    <item android:drawable="@drawable/footer" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
    <item android:drawable="@drawable/footer_pressed" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>

    <!-- Pressed -->
    <item android:drawable="@drawable/footer_pressed" android:state_pressed="true" android:state_selected="true"/>
    <item android:drawable="@drawable/footer_pressed" android:state_pressed="true"/>

</selector>`enter code here`