I think your problem is created by different form factors of the devices.
Very old smartphones tend to use old tv ratio of 4:3, newer using 16:9, nowadays it tends more and more to 2:1.
So your value of X% is never the same like Y% from the point of a given distance on the screen.
The more the length of displays increases, the more increases the value of 1%y compared to 1%x.
So if you want to draw a square and not a rectangle, using percentages is more or less following the form factor of the display or it's screen ratio. It will not work only with the percentages.
I personally don't like using dips, because this fails in another way. Imagine you want to move an object by shifting in absolute dips behind another object. This may work on one device, but also not on a second device. Never figured out how this is done perfectly.
But how are you able to solve this problem, especially if you do not know the screen ratio on the final device?
(believe me, it will drive you nuts when trying to draw a circle on several devices)
When using the designer, you have to calculate the ratio for the designer script (
ratio = 100%x / 100%y). With this value
ratio you are able to draw an exact square on multiple devices independing their form factor. It's all about defining the x-axis or y-axis of that object with a given value depending surrounding objects und calculating the other axis with the value of ratio and centering it correctly based on it's final size within the given view.
The two pictures below demonstrate a little bit better what I try to explain. Watch the different form factors of the devices and then the circle of the compass rose.
This is the way I solve that problem. Sure, depending on the limits of the given space, the compass rose will "pump" with this procedure. A circle is a circle...
