Существует ли Android API для нажатия кнопки по умолчанию / выбранных цветов? - PullRequest
4 голосов
/ 06 октября 2010

Я пытаюсь создать кнопку с настраиваемым фоном в состоянии по умолчанию, но при этом все еще используются цвета для нажатых / выбранных состояний, характерные для любого устройства, на котором она работает.

Из исходного кода 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 использовать рисованные объекты по умолчанию для нажатых / выбранных состояний.

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Самый простой подход - создать собственный стиль для кнопки, унаследованный от android:style/Widget.Button и добавив android:background к вашему пользовательскому стилю.

0 голосов
/ 06 октября 2010

Вы должны использовать рисование с сохранением состояния и просто использовать его для рисования по умолчанию для этих состояний.

...