Sri Lanka failed to capitalise on early chances Monday as England's Jos Buttler scored a fighting century to hand Sri Lanka a 164-run target in Sharjah.
Buttler scored 101 runs after a shaky England start, taking his team to a respectable 163 runs off their 20 overs.
England bowlers led by Adil Rashid then combined to bowl out Sri Lanka for 137 in 19 overs and remain unbeaten with four wins in the Super 12 stage to stay top of the group.
Only South Africa and Australia can match their eight points but England already have the cushion of a far superior run rate.
Buttler smashed six fours and six sixes in his 67-ball knock and put on 112 with skipper Eoin Morgan, who made 40, to lift England after they were in trouble at 35-3.
The England opener, who hit an unbeaten 71 in the win over Australia, surpassed his previous T20 best of 83 and now leads the tournament batting chart with 214 runs.
"I'm really pleased to keep a calm head and work through it, back myself to come good at the end and start to target certain bowlers and at certain ends," Buttler told Sky Sports.
"I felt like I used a lot of my experience. I remember saying a while ago, if I can put both parts of my game together then I think I'll be getting in a really good place with my T20 batting."
Sri Lanka had England on the backfoot but Buttler stood firm and took the attack to the opposition as he got to his hundred on the final ball of the innings with another hit over the fence.
Sri Lanka slipped to their third loss in four matches.
Leg-spinner Wanindu Hasaranga got two early wickets including Jason Roy for nine and Jonny Bairstow, trapped lbw for nought off the first ball.
The right-left batting pair of Buttler and Morgan stood firm to grind down the Sri Lankan attack with some sensible batting.
Buttler reached his fifty in 45 balls and then changed gears with powerful hits that unsettled the Sri Lankan bowling.
Morgan joined the charge with one four and three sixes in his 36-ball knock before being bowled by Hasaranga who returned figures of 3-21.
Fellow spinner Maheesh Theekshana gave away just 13 runs from his four overs but the pace bowlers were taken apart including skipper Dasun Shanaka going for 24 in his two overs.
Sri Lanka lost early wickets in their chase with Pathum Nissanka run out for one in the first over.
Charith Asalanka hit back with boundaries only to lose his wicket for 21 as Rashid struck in his first over.
The leg-spinner got Kusal Perera walking back for seven and Sri Lanka slipped to 57-4 when Chris Jordan trapped Avishka Fernando lbw for 13.
Shanaka, who made 26, and Hasaranga put on a threatening stand of 53 for the sixth wicket but a good relay catch between Roy and substitute Sam Billings on the outfield broke the stand.
Hasaranga walked back after making 34 and soon Shanaka soon followed him to the dug out.
England spinner Moeen Ali and fast bowler Chris Jordan also took two wickets each.
Teams
England: Jason Roy, Jos Buttler (wk), Dawid Malan, Jonny Bairstow, Eoin Morgan (capt), Liam Livingstone, Moeen Ali, Chris Woakes, Chris Jordan, Adil Rashid, Tymal Mills
Sri Lanka: Pathum Nissanka, Kusal Perera (wk), Charith Asalanka, Dhananjaya de Silva, Bhanuka Rajapaksa, Dasun Shanaka (capt), Chamika Karunaratne, Wanindu Hasaranga, Dushmantha Chameera, Maheesh Theekshana, Lahiru Kumara
Umpires: Adrian Holdstock (RSA), Rod Tucker (AUS)
TV Umpire: Joel Wilson (WIS)
Match Referee: David Boon (AUS)
After the fight, Jones celebrates with US President-elect Donald Trump, shakes hands
PCB likely to appoint Javed ahead of upcoming series against Zimbabwe, say sources
Usmani defeats Turkmenistan's Suleyman Hudayberdiyev in final straight sets, conceding just one game
Starting today, tour will build excitement ahead of much-anticipated Champion's Trophy, set to take place in coming year
Spencer Johnson's five-wicket haul stops Pakistan batters' chase for 148-run target in second T20I
Bout between 27-year-old social media star, 58-year-old ex-pugilist was streamed live on Netflix