РЕДАКТИРОВАТЬ: Кажется, что список слоев выглядит так: Обычный 9-патч фона кнопки находится сзади.Выделенный 9-патч рисуется внутри нормального фона, а не поверх него.Таким образом, это происходит внутри поля дополнения, указанного в свойствах 9-патчей обычного фона.Это было обнаружено, когда я возился с отступом на нормальном фоне.Это не то, что я хочу.Есть ли другой способ, без использования списка слоев, для меня просто наложить выделенное изображение поверх обычного фона в нажатом состоянии?
У меня есть селектор для фона кнопки:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btnprimary" android:state_pressed="false" />
<item android:drawable="@drawable/btn_primary_pressed_bg" android:state_pressed="true" />
</selector>
btnprimary
- это 9-патчовый файл .png, который является нормальным состоянием.btn_primary_pressed_bg
- это список слоев:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/btnprimary"/>
<item android:drawable="@drawable/btnhighlight"/>
</layer-list>
Как вы можете видеть, нажатым состоянием является нормальный фон с выделенным слоем сверху для обозначения нажатого состояния.btnhighlight
- это еще один 9-patch-файл .png, который имеет точно такую же растягиваемую область и поле для отступов, что и фон без нажатия.
Это прекрасно работает почти .Проблема в том, что в нажатом состоянии стандартный фон отображается нормально, как и должно быть, но выделение сверху не полностью заполняет ширину кнопки (высота заполняется нормально).
Вот скриншот:
А вот та же кнопка в обычном (не нажатом) состоянии:
Интересно, еслиЯ заменяю список слоев в селекторе только на выделение для нажатого состояния, оно точно заполняет ширину:
Этот шаблон применяется ко всем кнопкам вприложение.У меня не задано никаких отступов для кнопки.
РЕДАКТИРОВАТЬ: Вот результат предложения, предоставленного slukian: