The solution in https://forums.oracle.com/thread/2594033 worked. I added the 2nd line below to /opt/sqldeveloper/sqldeveloper.sh.
unset -v GNOME_DESKTOP_SESSION_ID
cd "`dirname $0`"/sqldeveloper/bin && bash sqldeveloper $*
Previously, I incorrectly updated ~/.bashrc to unset GNOME_DESKTOP_SESSION_ID. That's why running Sql Developer from the command line worked, but not from the launcher.