Android 如何最好使用xml为tabwidget按钮设置禁用状态的样式

Android 如何最好使用xml为tabwidget按钮设置禁用状态的样式,android,android-layout,tabwidget,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"/>

我有以下问题。我想为禁用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>
这确实可以,但我仍然想知道是否可以仅使用XML为tabwidget中的按钮定义禁用状态

调查结果: 所以,经过更多的修补,我发现了为什么禁用状态没有注册。在我的例子中,我为按钮使用自定义布局,这可能是任何自定义tabhost的人都会做的,并且在该布局中可能会有某种图像。具有上述定义状态的Drawable将应用于布局中的该图像,而不是整个布局。即使此选择器也足以具有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"/>
在这种情况下,将在图像上触发禁用的选择器状态,并显示所需的背景

仍未解释:

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


<?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`
`在这里输入代码`
谢谢你的建议,但这不是我想要的。我希望选项卡按钮在启用和禁用时具有不同的图像,以便用户知道他/她可以或不能单击它。你知道我怎么做吗。注意:需要显示3个不同的图像:活动、非活动、禁用。我认为不可能提及禁用按钮状态的可绘制图像。相反,您可以检查按钮是否禁用,然后设置相应的图像,如果未禁用,则使用选择器。.Hm。经过两个小时的尝试,我认为你是对的,这是不可能做到的状态。我15分钟前就开始使用你提到的这种方法,而且它很有效。但我仍然不明白同一个选择器如何适用于独立按钮,但不适用于tabButton。你知道这是为什么吗?@PSIXO甚至我很久以前也搜索过这个,但没有找到任何有效的原因来解释为什么会发生这种情况……我找到了原因,我将用这些发现更新这个问题,所以如果你感兴趣的话,请在一个小时左右看一看。非常感谢你的帮助。嘿,谢谢。。。。它起作用了
<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"/>
wrapper.tabWidget.getChildAt(0).setEnabled(false);
icon = (ImageView) wrapper.tabWidget.getChildAt(0).findViewById(R.id.icon);
icon.setEnabled(false);
<?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`