我试图追踪,如何 Lollipop 在布局文件中使用 android:enabled="false"
来禁用按钮的显示。
Holo
对于 Holo,很容易:在 styles_holo.xml 中,我找到了样式 Widget.Holo.Button,它给了我一个引用 @drawable/btn_default_holo_dark。在那里,我找到了选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_disabled_holo_dark" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed_holo_dark" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_focused_holo_dark" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_disabled_focused_holo_dark" />
<item
android:drawable="@drawable/btn_default_disabled_holo_dark" />
</selector>
棒棒糖
当我试图将相同的逻辑应用于棒棒糖时,我陷入了困境:
在styles_material.xml中,我找到了样式<style name="Widget.Material.Button">
,其中我找到了对<item name="background">@drawable/btn_default_material</item>
的引用。但是没有选择器??!!取而代之的是:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>
请问,Lollipop使用哪种特定的样式来表示禁用按钮?非常感谢!
编辑
我可以部分回答自己的问题:在@drawable/btn_default_mtrl_shape
中,我找到了一个对<solid android:color="?attr/colorButtonNormal" />
的引用,它又指向了@color/btn_default_material_light
,其中包括一个选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:alpha="@dimen/disabled_alpha_material_light"
android:color="@color/button_material_light"/>
<item android:color="@color/button_material_light"/>
</selector>
但是alpha值只解释了其中一半。不知何故,Lollipop 还将高度降为 0?