我遇到以下问题。我想为标签按钮禁用状态添加特殊图像,但它不起作用。这就是我在选择器中所做的。
<?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 的建议,我发现这是活动非活动状态的最佳选择器,但是当按钮被禁用时,我仍然无法使 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)
这确实可以,但我仍然想知道是否可以仅使用 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"/>
但是,当您禁用 tabwidget 按钮时,您必须手动将您在其中使用的图像设置为禁用,如下所示:
wrapper.tabWidget.getChildAt(0).setEnabled(false);
icon = (ImageView) wrapper.tabWidget.getChildAt(0).findViewById(R.id.icon);
icon.setEnabled(false);
在这种情况下,在图像上触发禁用选择器状态并显示所需的背景。
仍然没有解释:
这个难题中唯一缺少的是为什么选择TABBUTTON而不是残疾状态时会触发的图像的选定状态。我什至尝试在“图标”上设置侦听器,以查看在您更改选项卡时是否会调用这些侦听器,但这并没有发生,并且选择器中的静止图像设置为选中。所以基本上选择是在布局中的图像上触发(以某种方式)但禁用不是,我不知道为什么。如果查看此问题的人有一些发现,请添加评论或答案以供功能参考。对于那些只想解决类似错误的人,只需阅读 WOKRAROUND 或 FINDINGS 部分,因为这些可能会为您解决问题。