Hales scored 133 not out and Roy an unbeaten 112 in England’s highest first-wicket partnership in one-day cricket and they overhauled Sri Lanka’s 254 for seven with more than 15 overs to spare.
England lead the five-match series 1-0 after the first match in Nottingham was tied.
Sri Lanka opted to bat after winning the toss but their total always looked inadequate on a good batting pitch at Edgbaston as England took wickets at regular intervals.
Dinesh Chandimal and Angelo Mathews shared a fourth-wicket stand of 82 to give their side a platform.
Mathews fell for 44, however, and Chandimal was run out for 52 by Roy who had earlier produced a brilliant piece of fielding to run out Kusal Perera.
Upul Tharanga struck an unbeaten 53 to give Sri Lanka hope but England’s bowlers maintained a tight grip throughout, leg-spinner Adil Rasheed the pick of the attack with figures of 2-34 from 10 overs.
Hales and man-of-the-match Roy were completely in command against a toothless Sri Lanka attack.
Hales smashed six sixes and 10 fours while Roy went to his second one-day international century with his fourth six before driving Seekkuge Prasanna to the cover boundary to seal victory.
“It was a lot of fun. We wanted to get off to a good start. The next thing you know, we’re across the line,” Roy told the BBC.
“It’s a great buzz. There’s a lot of love in the dressing- room. I’m stoked for the win.”
The third match of the series is in Bristol on Sunday.