1. Overview
In the past, programmers typically designed computer user interfaces in pixels. For example, the image size is 80x32 pixels. The problem with this approach is that if you run the program on a new monitor with a higher dots per inch (dpi), the user interface will appear small. In some cases, the user interface may be too small to see the content. This problem can be solved by developing the program in a resolution-independent unit of measurement. Android App development supports different units of measurement.
2. Meaning of unit of measure
Dip:device independent pixels (device independent pixels). Different devices have different display effects, this is related to the device hardware, generally we support WVGA, HVGA and QVGA recommend this, do not rely on pixels.
Dp:dip is the same.
Px:pixels (pixels). Different devices show the same effect, generally we hvga represent 320x480 pixels, this use more.
Pt:point, is a standard length unit, 1pt=1/72 inches, for the printing industry, very simple to use;
sp:scaled pixels (enlarge pixels). Mainly used for font display of best for textsize.
In (inches): unit of length.
MM (mm): unit of length.
3. Conversion formula of unit of measure
In the Android source package Typedvalue.java, we look at the following function:
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: convert 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 screens: the following table
Screen 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 |
Currently Android default low=120; Medium =160; high = 240 |
5. In summary
According to PX = Dip * density/160, when the screen density is 160, px = Dip
According to Google's suggestion, TextView's font size is best to use SP to do units, and view the source of TextView know that Android by default using the SP as the font size units. The dip is used as the unit for other elements.
The difference between dip, DP, SP, PT, and PX in Android