StateListDrawable изменяет Drawable в зависимости от текущего состояния, так как состояние изменяется во время выполнения.Первоначально вы выбираете Drawable для использования - это то, что вы уже делаете, когда задаете Drawable в первую очередь.
Даже классы, подобные LevelListDrawable, все еще требуют, чтобы вы указали уровень Drawable, а не в фактическом представлении, используемом Drawable.и AFAIK Android автоматически проверяет, может ли Drawable обрабатывать состояния и, если это так, передает их.Drawable никогда не получает ссылку на представление, на котором используется Drawable.
Я бы просто создал несколько Drawable файлов для каждой кнопки.Если вы хотите предоставить доступ к определенным атрибутам кнопки, таким как цвет текста, отступы, размер шрифта и т. Д., Вам следует использовать стили Android.
Стили Android позволяют использовать такие стили, как BlueButton, RedButton, GreenButton, которые можно наследовать от стилей.,Таким образом, у вас может быть BlueButton, который устанавливает цвет текста, размер текста, тени текста, цвет для рисования для синего и т. Д., Затем создайте другой стиль для Red, который просто наследует BlueButton и изменяет только Drawable (хотя он может изменить любой атрибут, который он пожелает), а затемпросто используйте их на своих виджетах Button.Вам по-прежнему нужно иметь несколько Drawable-файлов для ссылок на стили, но все стили могут быть в одном файле.