I searched for a long time and then finally found a video that made sense to me. Now I have mouse, keyboard, and gamepad controller support! Building on Eve’s solution this is how I ended up doing it:
While the buttons do receive keyboard and gamepad focus, they don’t show a hovered/focused state. So you have to manually ask the button each tick if it “Has Any User Focus”. And, if not it still might be hovered, so you have to ask it “Is Hovered”.
Step 1: create a User Interface Widget Blueprint.
Step 2: add a normal Button.
Step 3: set the button tint to shades of gray. There is a totally separate foreground color (Color and Opacity) and separate background color. These won’t matter. The Tint will multiply against these.
Step 4: in the event Graph, Every Tick test to see if the button Has Any User Focus. If so, set the active Background color and Color and Opacity. I put these in variables for easy reuse. If not, set the normal (not selected) Background color and Color and Opacity. Note: I did an extra trick for “Is Hovered” where if true I also set the button widget to gain focus.
I’m not happy I have to scan every tick, but this seems to work for all devices so far.