Подтвердить что ты не робот

Lollipop RippleDrawable vs Selector for Pre-Lollipop

У меня есть кнопки с различными draw9patch png в качестве фона. В настоящее время кнопки управляются с помощью selector, которые выглядят примерно так:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/pressed" android:state_pressed="true"/>
  <item android:drawable="@drawable/disabled" android:state_enabled="false"/>
  <item android:drawable="@drawable/focused" android:state_focused="true"/>
  <item android:drawable="@drawable/default"/>
</selector>

Для Android Lollipop у них есть RippleDrawable для сенсорного эффекта, который выглядит примерно так:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight">
    <item>
    ...
    </item>
</ripple>

Что касается нового эффекта пульсации касания:

1: Можно ли установить draw9patch в качестве фона для RippleDrawable?

2: Как разместить два вышеперечисленных xml? Я хочу следовать дизайну материала? Должен ли я раскошелиться на новую папку/макет xml для нового RippleDrawable?

4b9b3361

Ответ 1

1) Да. См. Документацию для RippleDrawable для более подробной информации о том, как слои компонуются, но в основном вы хотите:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item android:drawable="@drawable/yourninepatch" />
</ripple>

Или также, чтобы очистить отключенное состояние, вы можете:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item>
        <selector>
            <item android:state_enabled="false">
                <nine-patch
                    android:src="@drawable/yourninepatch"
                    android:alpha="?android:attr/disabledAlpha" />
            </item>
            <item>
                <nine-patch android:src="@drawable/yourninepatch" />
            </item>
        </selector>
    </item>
</ripple>

2) Да, вы должны поместить свой рябь XML в drawable-v21.