简体   繁体   中英

Is there an Android API to get the default button pressed/selected colors?

I am trying to create a button that has a custom background in the default state, but that still uses the colors for the pressed/selected states that are particular to whatever device it is running on.

From looking at the EditText source code, it appears that there is no such API, and that the pressed/selected colors are simply hard-coded:

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);
}

Can anyone verify that it is not possible for an app to know what the pressed/selected colors are on the current device?

If there is no way for an app to figure out what the pressed/selected colors are, then there is no way to create a Selector for a button that will match the UI across different devices.

It seems that Android must provide a way to find out what these colors are so that apps can use colors that are consistent with the UI of the device they happen to be running on.

Thanks!

-Tom B.

Follow-up, in response to CaseyB's comment, I tried the following:

StateListDrawable d = new StateListDrawable();
d.addState(android.R.attr.state_enabled, getResources().getDrawable(R.drawable.my_custom_background));
myButton.setBackgroundDrawable(d);

but it causes the button to use the custom background for all states. There doesn't appear to be a way to tell the StateListDrawable to use the default drawables for the pressed/selected states.

最简单的方法是为你的按钮创建一个自定义样式,继承自android:style/Widget.Button并将android:background添加到你的自定义样式中。

你应该使用有状态的drawable,并让它使用这些状态的默认drawable。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM