Ha iniziato a recitare a sei anni, dividendosi tra televisione e teatro. Ha partecipato a pellicole come L\'illusionista e La mia vita è un disastro, ma è con Nowhere Boy (dove interpretava John Lennon) e Kick-Ass, che comincia a farsi notare davvero. Al suo attivo anche il film nominato agli Oscar Albert Nobbs. In arrivo adesso ci sono Le belve di Oliver Stone, accanto a Blake Lively, Taylor Kitsch, Uma Thurman e Benicio Del Toro, oltre ad Anna Karenina con Keira Knightley e Jude Law, dove interpreta il conte Vronsky. Tra i ruoli che gli sono sfuggiti di mano ci sono invece quello di Peter Parker in The Amazing Spider-Man, andato poi ad Andrew Garfield, e quello di Jack in Jack the Giant Killer, andato invece a Nicholas Hoult.