gpt4 book ai didi

android - 如何让 ColorStateList 中的 "state_enabled"在 Spinner 中工作?

转载 作者:行者123 更新时间:2023-11-30 03:54:08 26 4
gpt4 key购买 nike

我觉得我遗漏了一些明显的东西,但我有一个名为“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>

出现“禁用状态”。不知道我做错了什么。

最佳答案

[因为我不能评论你的问题,所以我会写一个答案。]

我也有过同样的经历。

有趣的是,当 TextView 对象独立时,它们可以成功启用和禁用,并对这个设置做出适当的 react 。

此时我的假设是 Spinner 根本不会(至少)将其启用状态(更改)传播到它的子 (ren),在这种情况下尤其是 TextView。

我认为这是一个错误或设计缺陷,因为它(不必要地)限制了开箱即用地更改微调器外观的方式,仅举一个方面。

当然,可以将 Spinner 子类化并(至少)将此事件传递给 TextView。但是,我不认为这是一个干净的解决方案,除非有人可以指出 Spinner 在这方面符合 Android 的底层设计原则,这样行为就不会改变。

[更新 21012-12 月 7 日]

另外两个(意外)发现。

首先,关于 android:addStatesFromChildren,请参阅下面我的评论。

其次,android:disableChildrenWhenDisabled 显然是为 Holo 风格引入的,因为如果没有该功能,Holo Spinners 将不会好看,请参阅 https://android.googlesource.com/platform/frameworks/base/+/42b7e99b11a5ab1cbc0beebe0b15e46bdf462dff%5E!/ .尽管用词不当,但如果设置为 true,Spinner 应该将其启用状态(两者 true false,即)传播给其子项。

据推测,如果您的应用程序以 Holo(或更高版本)主题为目标,则将其设置为 true,而如果您以较旧的主题(resp。Android 版本)为目标,则它应该为 false(resp。不存在)。

目前看来,在 Eclipse 中显式处理此属性可能会出现问题,因为在 Eclipse 插件中添加它的时间相当晚,请参阅 https://android.googlesource.com/platform/sdk/+/8381e23ec6d557059d15c73ea313d8324359f762%5E2..8381e23ec6d557059d15c73ea313d8324359f762/

换句话说,当一个人为支持 Holo 或更高版本的设备开发时,可以期望 Spinners 将他们的启用状态传播给他们的 child 。时至今日,Android 2 设备仍在销售并占有一定的市场份额,因此在许多情况下,人们将不得不忍受旧的 Spinner,它们开箱即用时无法按预期工作。

关于android - 如何让 ColorStateList 中的 "state_enabled"在 Spinner 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13608259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com