I recently discovered that my Galaxy S7 Edge was reporting its display resolution as 640dpi, when I expected it to be approximately 534dpi. What’s the big deal, you ask? Well, it’s causing dynamically sized elements on screen to be approximately 17% bigger than they were intended to be drawn. Some users might like this, as it will make elements just a little easier to tap on. But others might not like it, because you can’t display as much information on the screen.
When apps are built for Android, they use “display pixels” rather than physical pixels to size elements on the screen. If you have a button that should be 0.5 inch x 0.5 inch on screen, that button obviously has to be drawn differently depending on the screen density. On an older phone, the display density might be 160dpi, so you’d draw the element using 80 pixels in each direction. On a phone with a density of 320dpi, you would draw it with 160 pixels in each direction.
Apps depend on the operating system reporting an accurate screen density so they know how big to draw something. If the OS overstates the density (like the S7 saying that it is 640dpi), the app will draw elements using more pixels than is necessary. Your 0.5 inch x 0.5 inch button will now be 0.58 inches x 0.58 inches, taking up a larger portion of the screen than was originally intended.
It’s strange that Samsung has programmed the S7s to report 640 dpi by default. Since it is a 1440×2560 display, the math works out to a 4.7 inch screen, despite the fact that the S7 has a 5.1 and the S7 Edge has a 5.5.
I am guessing that this choice had something to do with the fact that under the hood, they’re trying to slot the display into one of the original densities provided by the android SDK. DENSITY_XXHIGH (480dpi) wasn’t high enough to reflect the true resolution (about 534dpi on the Edge), so they went up to the next option of DENSITY_XXXHIGH (640 dpi).
I noticed that Google added intermediate densities like DENSITY_560 in API level 21 (Lollipop). Since the S7s shipped with Marshmallow, those intermediate densities were definitely available at the time they were designing the phone. I’m surprised that Samsung wouldn’t have just used DENSITY_560, which seems a much better fit than DENSITY_XXXHIGH.
I am trying out an app, Display Scaling, to unlock a setting that Samsung built into the S7 that will change that resolution to 560dpi, giving you back your screen real estate.
So far, so good. I saw warnings in the reviews about Android Pay and other Google SafetyNet API apps. I will have to be on the lookout for stuff like this.