Show UI Button press color from script when invoking onClick

Hi! I have a UI button that I’d like to be able to use through both the mouse and keyboard. When the mouse is used to press the button, the button shows the “Pressed” color, and invokes the OnClick event. When a keyboard key is pressed (say, “1”), that event can be used to also invoke the button’s OnClick event (buttonName.onClick.Invoke();), however it doesn’t graphically show the button’s “Pressed” color, so there isn’t visual feedback that it’s been pressed.

I feel like I’ve done sufficient homework, trying different inquires on how to solve this and watching several hotbar tutorial videos, spending 5-6 hours of research time, but I can’t find anyone addressing this in particular. Maybe I haven’t figured out how to word the question correctly?

What’s the best way to do this?

Thanks!

// Optional:
// to leave button in Highlighted state
//ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
//
// to leave button in Selected state
//ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.selectHandler);
// or
//button.Select();

        ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.submitHandler);

You can change button color by button.image.color = newColor. If you want to set the pressed color than you can do button.image.color = btn.colors.pressedColor. But then it will stays like that so you have to set it back to normal color. You can do that for example by invoking method in some time which will set the color back. You can try something like this:

void PressButtonColorChange()
  {
    float duration = 0.1f;

    SetPressedColor();
    Invoke("SetNormalColor", duration);
  }

  void SetPressedColor()
  {
    button.image.color = button.colors.pressedColor;
  }

  void SetNormalColor()
  {
    button.image.color = button.colors.normalColor;
  }