Does setWidth(int pixels) use device independent pixel or physical pixel as unit? For example, does setWidth(100) set the a view's width to 100 dips or 100 pxs?
Thanks.
px - one pixel Corresponds to actual pixels on the screen. Pixel is the smallest controllable element of a picture represented on the screen. sp - Scale-independent Pixels This is like the dp unit. scaled by the user's font size preference.
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
A dp is equal to one physical pixel on a screen with a density of 160. To calculate dp: dp = (width in pixels *... A dp is equal to one physical pixel on a screen with a density of 160.
It uses pixels, but I'm sure you're wondering how to use dips instead. The answer is in TypedValue.applyDimension()
. Here's an example of how to convert dips to px in code:
// Converts 14 dip into its equivalent px Resources r = getResources(); int px = Math.round(TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
The correct way to obtain a constant number of DIPs in code is to create a resources XML file containing dp values a bit like:
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="image_width">100dp</dimen> <dimen name="image_height">75dp</dimen> </resources>
Then refer to the resource in your code like so:
float width = getResources().getDimension(R.dimen.image_width)); float height = getResources().getDimension(R.dimen.image_height));
The float you have returned will be scaled accordingly for the pixel density of the device and so you don't need to keep replicating a conversion method throughout your application.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With