I’ll break my question in steps, so that it’s easier to follow/answer.
Step 1: According to the Android Developer Guide, "The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen". This means that on a Galaxy S, which has 233 dpi, 1 dp is equal to 1.46 physical pixels (233/160).
Step 2: Given the Galaxy S has a resolution of 480×800, it means that the height of its screen is 548dp (800 physical pixels divided by 1.46). So if I make the height of a LinearLayout I create to be 274dp it will take exactly half the screen. I tested, and it works.
Step 3: The Galaxy S3 has 306 dpi, so on that device 1dp = 1.9125 physical pixels (306/160). Since it has a resolution of 720×1280, the height of its screen is 670dp (1280/1.9125). Again, if I make a LinearLayout with around 335 it will take half the screen. Tested and worked.
Question: How do I make a LinearLayout that will take half the screen both on the Galaxy S and on the Galaxy S3 using Density-independent pixels? Cause if I use 274dp it will take half the screen only on the S, and vice-versa. Or are my calculations wrong in any step?
Update: Thinking about it I came up with the following idea: use "ScreenMetrics" to get both the dpi and screen resolution of the device. Then let my app calculate the total size of the screen in DPs (which will be the resolution divided by (dpi of device/160), and then set the height of the layout dynamically to be half of that. A lot of work, but I guess it’s the way to do this?
On galaxy S , the dp is 1.5
the reall px will be `(int)(density * x + 0.5)
you can get you dp with