Я пытаюсь создать кнопку с настраиваемым фоном в состоянии по умолчанию, но при этом все еще используются цвета для нажатых / выбранных состояний, характерные для любого устройства, на котором она работает.
Из исходного кода EditText видно, что такого API нет, и что нажатые / выбранные цвета просто жестко запрограммированы:
public EditText(/*Context context, AttributeSet attrs, int defStyle*/) {
super(/*context, attrs, defStyle*/);
StateListDrawable mStateContainer = new StateListDrawable();
ShapeDrawable pressedDrawable = new ShapeDrawable(new RoundRectShape(10,10));
pressedDrawable.getPaint().setStyle(Paint.FILL);
pressedDrawable.getPaint().setColor(0xEDEFF1);
ShapeDrawable focusedDrawable = new ShapeDrawable(new RoundRectShape(10,10));
focusedDrawable.getPaint().setStyle(Paint.FILL);
focusedDrawable.getPaint().setColor(0x5A8AC1);
ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(10,10));
defaultDrawable.getPaint().setStyle(Paint.FILL);
defaultDrawable.getPaint().setColor(Color.GRAY);
mStateContainer.addState(View.PRESSED_STATE_SET, pressedDrawable);
mStateContainer.addState(View.FOCUSED_STATE_SET, focusedDrawable);
mStateContainer.addState(StateSet.WILD_CARD, defaultDrawable);
this.setBackgroundDrawable(mStateContainer);
}
Может ли кто-нибудь убедиться, что приложение не может узнать, какие цвета были нажаты / выбраны на текущем устройстве?
Если приложение не может выяснить, что такое нажатые / выбранные цвета, то невозможно создать селектор для кнопки, которая будет соответствовать пользовательскому интерфейсу на разных устройствах.
Похоже, что Android должен предоставить способ узнать, что это за цвета, чтобы приложения могли использовать цвета, которые соответствуют интерфейсу пользователя устройства, на котором они работают.
Спасибо!
-Tom B.
В ответ на комментарий CaseyB я попробовал следующее:
StateListDrawable d = new StateListDrawable();
d.addState(android.R.attr.state_enabled, getResources().getDrawable(R.drawable.my_custom_background));
myButton.setBackgroundDrawable(d);
но это заставляет кнопку использовать пользовательский фон для всех состояний. Похоже, нет способа сказать StateListDrawable использовать рисованные объекты по умолчанию для нажатых / выбранных состояний.