Я попытался отследить, как Lollipop отображает кнопку, которая отключена с помощью android:enabled="false"
в файле макета.
Холо
С 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>
Lollipop
Когда я пытаюсь применить ту же логику к Lollipop, я застрял:
В 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>
Но это значение альфа объясняет только половину этого. Как-то Lollipop также установил высоту до 0?