EditText 底线颜色在焦点上变化
EditText bottom line colour changing on focus
这是 EditText
的 abc_edit_text_material
可绘制对象 XML:
<selector>
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
它定义了一组图像但没有定义颜色(我无法跟踪应用颜色的时刻)。
下面的一段代码使底线始终保持红色,尽管它的粗细随焦点而变化(因此,相同的 <selector>
仍在使用):
Drawable back = edittext.getBackground();
back.setColorFilter(0xffff0000, PorterDuff.Mode.SRC_ATOP);
editText.setBackground(back);
但如果在那之后我恢复默认的可绘制对象,颜色会根据当前的焦点状态开始变化(灰色未聚焦,重音聚焦):
back.setBackgroundResource(R.drawable.abc_edit_text_material);
问题:
- 为什么在应用修改后的
Drawable
后使用相同的 selector
?
- 为什么在重新设置与背景相同的 XML 可绘制对象后,颜色开始响应焦点变化?是否有一些对象存储了一组与
selector
的 state_enabled
等对应的颜色?
- (说不定,回答这一条也能把前两条说清楚了)
在什么时候以及如何默认应用颜色?我的意思是,它是否检查背景是否为默认背景以及 class 是否需要这种颜色?我尝试查看从 AppCompatEditText
到 View
的来源,但没有找到类似的东西
为什么不呢?通过 getBackground()
你检索了一个 StateListDrawable
,它似乎接受滤色器。
响应焦点是默认行为,以明确当前关注的项目以及键盘输入的位置。您没有重置过滤后的背景;你指的是原来的。
Class 存储其默认背景并将滤镜应用于未聚焦 (colorControlNormal
) 和聚焦 (colorControlActivated
) 状态。如果你改变它,嗯,它改变了,过滤器也没有了。
这是 EditText
的 abc_edit_text_material
可绘制对象 XML:
<selector>
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
它定义了一组图像但没有定义颜色(我无法跟踪应用颜色的时刻)。
下面的一段代码使底线始终保持红色,尽管它的粗细随焦点而变化(因此,相同的 <selector>
仍在使用):
Drawable back = edittext.getBackground();
back.setColorFilter(0xffff0000, PorterDuff.Mode.SRC_ATOP);
editText.setBackground(back);
但如果在那之后我恢复默认的可绘制对象,颜色会根据当前的焦点状态开始变化(灰色未聚焦,重音聚焦):
back.setBackgroundResource(R.drawable.abc_edit_text_material);
问题:
- 为什么在应用修改后的
Drawable
后使用相同的selector
? - 为什么在重新设置与背景相同的 XML 可绘制对象后,颜色开始响应焦点变化?是否有一些对象存储了一组与
selector
的state_enabled
等对应的颜色? - (说不定,回答这一条也能把前两条说清楚了)
在什么时候以及如何默认应用颜色?我的意思是,它是否检查背景是否为默认背景以及 class 是否需要这种颜色?我尝试查看从AppCompatEditText
到View
的来源,但没有找到类似的东西
为什么不呢?通过
getBackground()
你检索了一个StateListDrawable
,它似乎接受滤色器。响应焦点是默认行为,以明确当前关注的项目以及键盘输入的位置。您没有重置过滤后的背景;你指的是原来的。
Class 存储其默认背景并将滤镜应用于未聚焦 (
colorControlNormal
) 和聚焦 (colorControlActivated
) 状态。如果你改变它,嗯,它改变了,过滤器也没有了。