You can keep all your code in one solution and most of the code will only have to be written once and work on all platforms.
Here's the catch, you need to create a new project per platform. For example you might have YourGame.Core, YourGame.Android and YourGame.Windows. Code that is shared between projects can live in the Core project and be added to the platform specific projects as linked files. It's a bit a maintenance pain, but not as much as you might think. Many developers have reported that they setup a project for a new platform in around 15 minutes once they have the windows one working.
The reason for this pain stems back to the ability to have a single project targeting multiple frameworks. For example, you can create a project that targets Mono / .NET 4 and a different project that targets Android 2.2. Each project can contain identical code, but there's currently no way to target both frameworks at the same time within the same project.
This problem is not isolated to Mono and has also been reported when people are developing for Microsoft specific platforms like Windows Phone and Silverlight.
There is a better solution in the works called Portable Class Libraries. The idea is that you can have all of your core code in a single project and simply reference the DLL in each of your other projects.
It looks like Mono has at least partial support for Portable Class Libraries according to the Mono 3.0 release notes, but I haven't tried it yet.