1. Overview
In the past, programmers used to design computer user interfaces in pixel units. For example: The picture size is 80x32 pixel. The problem with this is that if you run the program on a new monitor that is higher in dots per inch (dpi), the user interface will look small. In some cases, the user interface may be so small that it is difficult to see the content. So we can solve this problem by using the resolution-independent unit of measurement to develop the program. Android application development supports different units of measurement.
2. Unit of measure meaning
Dip:device independent pixels (device independent pixel). Different devices have different display effects, this is related to the device hardware, we generally support the WVGA, HVGA and QVGA recommended to use this, do not rely on pixels.
Dp:dip is the same.
Px:pixels (Pixel). Different devices display the same effect, generally we hvga represent 320x480 pixels, this use more.
Pt:point, is a standard length unit, 1pt=1/72 inches, used in the printing industry, is very simple and easy to use;
sp:scaled pixels (zoom in pixels). Mainly used for font display best for textsize.
In (inches): unit of length.
MM (mm): unit of length.
3, the unit of measurement of conversion formula
In the Android source Pack Typedvalue.java, we look at the following functions:
Copy Code code as follows:
public static float applydimension (int unit, float value,
Displaymetrics metrics)
{
Switch (unit) {
Case COMPLEX_UNIT_PX:
return value;
Case COMPLEX_UNIT_DIP:
return value * metrics.density;
Case COMPLEX_UNIT_SP:
return value * metrics.scaleddensity;
Case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0F/72);
Case COMPLEX_UNIT_IN:
return value * METRICS.XDPI;
Case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
The function: converts units to pixels.
Metrics.density: The default value is Density_device/(float) density_default;
Metrics.scaleddensity: The default value is Density_device/(float) density_default;
METRICS.XDPI: The default value is Density_device;
Density_device: For screen density
Density_default: Default value is 160
4. Screen density: Indicates how many display points per inch, and the resolution is two different concepts.
Android mainly has the following kinds of screens: the following table
Scene Tyep |
Width Pixels |
Height Pixels |
Size Range (inches) |
Screen density |
QVGA |
240 |
320 |
2.6-3.0 |
Low |
Wqvga |
240 |
400 |
3.2-3.5 |
Low |
Fwqvga |
240 |
432 |
3.5-3.8 |
Low |
HVGA |
320 |
480 |
3.0-3.5 |
Medium |
WVGA |
480 |
800 |
3.3-4.0 |
High |
FWVGA |
480 |
854 |
3.5-4.0 |
High |
WVGA |
480 |
800 |
4.8-5.5 |
Medium |
FWVGA |
480 |
854 |
5.0-5.8 |
Medium |
Note |
Current Android default low=120 Medium =160 high = 240 |
5. To sum up
PX = Dip * density/160, then when the screen density is 160, the PX = Dip
According to Google's proposal, TextView is best to use the SP to do units, and view the source of TextView, Android by default using the SP as the font size unit. A dip as a unit of other elements.