【发布时间】:2015-08-14 10:47:25
【问题描述】:
这是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);
但是如果在那之后我恢复默认的drawable,颜色会根据当前的焦点状态开始改变(灰色未聚焦,重音聚焦):
back.setBackgroundResource(R.drawable.abc_edit_text_material);
问题:
- 为什么在应用修改后的
Drawable后使用相同的selector? - 为什么在重新设置与背景相同的 XML 可绘制对象后颜色开始响应焦点变化?是否有一些对象存储一组与
selector的state_enabled等对应的颜色? - (或许这一篇的答案也会把前两篇搞清楚)
默认情况下在哪个时刻以及如何应用颜色?我的意思是,它是否检查背景是否是默认的以及哪个类需要这种颜色?我尝试查看从AppCompatEditText到View的来源,但没有找到类似的东西
【问题讨论】:
标签: android android-edittext tint android-appcompat