我觉得我错过了一些明显的东西,但我有一个名为“voices_spinner_white_text_color_states”的ColorStateList,见下文:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:color="@color/color_white_light_alpha" />
<item
android:state_enabled="true"
android:color="@color/color_white" />
</selector>
我在我的SpinnerAdapter中引用了这样的内容:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View item;
if( convertView != null ){
item = (GenericSpinnerItem)convertView;
} else {
item = new GenericSpinnerItem( context, false );
((GenericSpinnerItem)item ).valueText.setTextColor( context.getResources().getColorStateList(R.drawable.voices_spinner_white_text_color_states) );
AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams( LayoutParams.MATCH_PARENT, M.dp(30));
item.setLayoutParams(layoutParams);
}
( (GenericSpinnerItem)item ).setup(values.get(position));
return item;
}
我希望我打电话时
spinner.setEnabled( false )
微调器的文本将显示禁用状态。它显示启用状态就好了,但是当我将微调器的启用状态更改为false时,它根本不显示禁用状态。
事实上,为了测试,如果我将“android:state_enabled =”false“更改为”android:state_enabled =“ true ”,就像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="true"
android:color="@color/color_white_light_alpha" />
<item
android:state_enabled="true"
android:color="@color/color_white" />
</selector>
显示“禁用状态”。不知道我做错了什么。
答案 0 :(得分:1)
[由于我无法评论你的问题,我会写一个答案。]
我经历过完全相同的事情。
有趣的是,可以成功启用和禁用TextView对象,并在它们独立时适当地对此设置作出反应。
我此时的假设是,Spinner根本不会(至少)将其启用状态(更改)传播到其子(ren),特别是TextView。
我认为这是一个错误或设计缺陷,因为它(不必要地)限制了人们可以改变旋转器外观的方式,仅举一个方面。
当然,可以将Spinner子类化并将(至少)此事件传递给TextView。但是,我不会认为这是一个干净的解决方案,除非有人能指出Spinner在这方面符合Android的基本设计原则,这样行为就不会改变。
[更新21012-Dec 7]
另外两项(意外)调查结果。
首先,关于 android:addStatesFromChildren ,请参阅下面的评论。
其次, android:disableChildrenWhenDisabled 显然是针对Holo风格引入的,因为如果没有该功能,Holo Spinners看起来不会很好,请参阅https://android.googlesource.com/platform/frameworks/base/+/42b7e99b11a5ab1cbc0beebe0b15e46bdf462dff%5E!/。尽管用词不当,如果设置为true,Spinner应该将其启用状态( true 和 false,即它)传播给其子项。
据推测,使用你的应用程序将Holo(或更高版本)主题设置为true,如果你定位较旧的主题(分别是Android版本),它应该是假的(不存在)。
目前看来,在Eclipse中显式处理这个属性可能会有问题,因为它在Eclipse插件中添加了相当晚的内容,请参阅https://android.googlesource.com/platform/sdk/+/8381e23ec6d557059d15c73ea313d8324359f762%5E2..8381e23ec6d557059d15c73ea313d8324359f762/
换句话说,当一个人开发支持Holo的设备或更高版本时,人们可以期望Spinners将其启用状态传播给他们的孩子。由于Android 2设备至今仍在销售并占有一定的市场份额,因此在许多情况下,人们将不得不使用旧的Spinners,它们无法正常运行。