The suspect, identified as Lonzo Murphy, was booked into the Multnomah County Jail for violating parole, and additional charges were pending, police said.
Murphy was apprehended at 1:30 a.m. local time when a vehicle he was in was stopped by the Portland Police Bureau gang unit in the western part of the city, the department said in a statement.
Police said they recovered a handgun from the vehicle and served a search warrant at an apartment five blocks east of Rosemary Anderson High School, near where the four victims were shot on Friday.
Taylor Zimmers, 16, struck by the gunfire shortly after noon outside the school in north Portland, was rushed to hospital, where she was in critical condition Friday evening, police said.
A 17-year-old boy and 20-year-old man were in fair condition at the same hospital on Friday evening and a 17-year-old female was treated and released after being grazed in the foot by a bullet, police said.
All the victims were affiliated in some way with Rosemary Anderson and ran to the school following the shooting, where they received initial treatment as it was placed on lockdown, police said.
The shooting suspect fled the scene with two other males, said Pete Simpson of the Portland Police Bureau.
Portland Mayor Charlie Hales said the shooting represented a "bad day" for a neighborhood that has worked to overcome a history of gang violence.
Rosemary Anderson is a community-based alternative high school serving up to 190 "at-risk" students, according to the school's website. It said many of the students are homeless or have been expelled from or dropped out of Portland's public high schools.