Android Specifying Pixel Units (like Sp, Px, Dp) Without Using Xml
Is it possible to specify the pixel unit in code. What I mean is, say I have a layout and I want the size to be 20dp, then is there any way to do so without writing in a layout xm
Solution 1:
In a view:
DisplayMetricsmetrics= getContext().getResources().getDisplayMetrics();
floatdp=20f;
floatfpixels= metrics.density * dp;
intpixels= (int) (fpixels + 0.5f);
In an Activity, of course, you leave off the getContext()
.
To convert from scaled pixels (sp
) to pixels, just use metrics.scaledDensity
instead of metrics.density
.
EDIT: As @Santosh's answer points out, you can do the same thing using the utility class TypedValue
:
DisplayMetricsmetrics= getContext().getResources().getDisplayMetrics();
floatdp=20f;
floatfpixels= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
intpixels= Math.round(fpixels);
For sp
, substitute TypedValue.COMPLEX_UNIT_SP
for TypedValue.COMPLEX_UNIT_DIP
.
Internally, applyDimension()
does exactly the same calculation as my code above. Which version to use is a matter of your coding style.
Solution 2:
You can use
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());
now, the value of pixels
is equivalent to 20dp
The TypedValue contains other similar methods that help in conversion
Post a Comment for "Android Specifying Pixel Units (like Sp, Px, Dp) Without Using Xml"