In reply, the Sri Lankans blew hot and cold before getting dismissed for 137 in 19 overs. Bhanuka Rajapaksa (26), Dasun Shanaka (26) and Wanindu Hasaranga (34) tried their best but in vain. For England, Moeen Ali, Adil Rashid and Chris Jordan took two wickets apiece.
Earlier, Buttler smashed six fours and six sixes in his 67-ball knock and put on 112 with skipper Eoin Morgan, who made 40, after being invited to bat first.
The England opener, who hit a whirlwind, unbeaten 71 in the win over Australia, surpassed his previous T20 best of 83 and now has 214 runs in this year’s edition.
Sri Lanka had England on the backfoot at 35 for three after electing to field first, but Buttler stood firm and took the attack to the opposition as he got to his hundred off the final ball of the innings with a six.
Leg-spinner Wanindu Hasaranga, who claimed a hat-trick in his team’s previous match against South Africa, struck with his second ball as he bowled Jason Roy for nine with a googly that skidded on to the stumps.
Buttler took on Lahiru Kumara, stroking two boundaries in the third over, but England still found it tough to get runs in the PowerPlay.
Dawid Malan tried to break the shackles with a boundary off Dushmantha Chameera but the pace bowler soon dismissed the left-hander for six.
England suffered another blow when Jonny Bairstow fell first ball with Hasaranga coming back to trap him lbw. The bowler was denied by the on-field umpire before reviewing successfully.
The right-left pair of Buttler and Morgan then batted sensibly to grind down the Sri Lankan attack. Buttler reached his fifty in 45 balls and then changed gears with powerful hits that rattled the Sri Lankan bowlers.
Morgan joined the charge with one four and three sixes in his 36-ball knock before he was bowled by Hasaranga.
But Buttler finished off in style, smashing Chameera for a maximum, to bring up his maiden T20 century. (Courtesy AFP)