19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackbornimport android.os.SystemProperties; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A structure describing general information about a display, such as its 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size, density, and font scaling. 2571d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main * <p>To access the DisplayMetrics members, initialize an object like this:</p> 2671d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main * <pre> DisplayMetrics metrics = new DisplayMetrics(); 2771d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main * getWindowManager().getDefaultDisplay().getMetrics(metrics);</pre> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DisplayMetrics { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for low-density screens. 32a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 33a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_LOW = 120; 34a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 35a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 36a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for medium-density screens. 37a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 38a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_MEDIUM = 160; 39a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 40a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 41493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * This is a secondary density, added for some common screen configurations. 42493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * It is recommended that applications not generally target this as a first 43493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * class density -- that is, don't supply specific graphics for this 44493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * density, instead allow the platform to scale from other densities 45493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * (typically {@link #DENSITY_HIGH}) as 46493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * appropriate. In most cases (such as using bitmaps in 47493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * {@link android.graphics.drawable.Drawable}) the platform 48493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * can perform this scaling at load time, so the only cost is some slight 49493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * startup runtime overhead. 50493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * 51493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * <p>This density was original introduced to correspond with a 52493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * 720p TV screen: the density for 1080p televisions is 53493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * {@link #DENSITY_XHIGH}, and the value here provides the same UI 54493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * size for a TV running at 720p. It has also found use in 7" tablets, 55493861dfa011f482987c7a49d147d6e50a90c692Dianne Hackborn * when these devices have 1280x720 displays. 56b96cbbd11c4590bec846212c33361e02293f18b5Dianne Hackborn */ 57b96cbbd11c4590bec846212c33361e02293f18b5Dianne Hackborn public static final int DENSITY_TV = 213; 58b96cbbd11c4590bec846212c33361e02293f18b5Dianne Hackborn 59b96cbbd11c4590bec846212c33361e02293f18b5Dianne Hackborn /** 60a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * Standard quantized DPI for high-density screens. 61a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn */ 62a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_HIGH = 240; 63a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn 64a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn /** 65f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell * Intermediate density for screens that sit between {@link #DENSITY_HIGH} (240dpi) and 66f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell * {@link #DENSITY_XHIGH} (320dpi). This is not a density that applications should target, 67f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell * instead relying on the system to scale their {@link #DENSITY_XHIGH} assets for them. 68f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell */ 69178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer public static final int DENSITY_260 = 260; 70178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer 71178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer /** 72178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * Intermediate density for screens that sit between {@link #DENSITY_HIGH} (240dpi) and 73178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * {@link #DENSITY_XHIGH} (320dpi). This is not a density that applications should target, 74178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * instead relying on the system to scale their {@link #DENSITY_XHIGH} assets for them. 75178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer */ 76f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell public static final int DENSITY_280 = 280; 77f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell 78f6d4045d6c386fe09eafb894aa1ff79ca6f04178Adam Powell /** 79178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * Intermediate density for screens that sit between {@link #DENSITY_HIGH} (240dpi) and 80178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * {@link #DENSITY_XHIGH} (320dpi). This is not a density that applications should target, 81178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * instead relying on the system to scale their {@link #DENSITY_XHIGH} assets for them. 82178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer */ 83178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer public static final int DENSITY_300 = 300; 84178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer 85178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer /** 86a0b46c9c441f017a2008ca8ee2c864987465996bDianne Hackborn * Standard quantized DPI for extra-high-density screens. 87a0b46c9c441f017a2008ca8ee2c864987465996bDianne Hackborn */ 88a0b46c9c441f017a2008ca8ee2c864987465996bDianne Hackborn public static final int DENSITY_XHIGH = 320; 89a0b46c9c441f017a2008ca8ee2c864987465996bDianne Hackborn 90a0b46c9c441f017a2008ca8ee2c864987465996bDianne Hackborn /** 9109acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn * Intermediate density for screens that sit somewhere between 92a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn * {@link #DENSITY_XHIGH} (320 dpi) and {@link #DENSITY_XXHIGH} (480 dpi). 9309acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn * This is not a density that applications should target, instead relying 9409acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn * on the system to scale their {@link #DENSITY_XXHIGH} assets for them. 9509acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn */ 96178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer public static final int DENSITY_340 = 340; 97178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer 98178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer /** 99178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * Intermediate density for screens that sit somewhere between 100178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * {@link #DENSITY_XHIGH} (320 dpi) and {@link #DENSITY_XXHIGH} (480 dpi). 101178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * This is not a density that applications should target, instead relying 102178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer * on the system to scale their {@link #DENSITY_XXHIGH} assets for them. 103178bba4589ed473a0ce9df89a3fc2b0a429449edErik Wolsheimer */ 104f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell public static final int DENSITY_360 = 360; 105f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell 106f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell /** 107f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell * Intermediate density for screens that sit somewhere between 108f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell * {@link #DENSITY_XHIGH} (320 dpi) and {@link #DENSITY_XXHIGH} (480 dpi). 109f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell * This is not a density that applications should target, instead relying 110f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell * on the system to scale their {@link #DENSITY_XXHIGH} assets for them. 111f6d9cd19e28d78fe3f46914959932ea1244b04edAdam Powell */ 11209acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn public static final int DENSITY_400 = 400; 11309acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn 11409acb7ca897c9f49dd65b7173688e4ca63ca5dd3Dianne Hackborn /** 1151e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn * Intermediate density for screens that sit somewhere between 1161e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn * {@link #DENSITY_XHIGH} (320 dpi) and {@link #DENSITY_XXHIGH} (480 dpi). 1171e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn * This is not a density that applications should target, instead relying 1181e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn * on the system to scale their {@link #DENSITY_XXHIGH} assets for them. 1191e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn */ 1201e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn public static final int DENSITY_420 = 420; 1211e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn 1221e9c51a00aeb8c0bc6be170a4615cf2959c4f032Dianne Hackborn /** 12361a5a3f2c38ca908b7a607e7bc19b8553f59780eJeff Davidson * Standard quantized DPI for extra-extra-high-density screens. 124d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn */ 125d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn public static final int DENSITY_XXHIGH = 480; 126d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn 127d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn /** 128a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn * Intermediate density for screens that sit somewhere between 129d561913798c6ee3c987f39fa19f70e53eeb93ce6Philip Nowell * {@link #DENSITY_XXHIGH} (480 dpi) and {@link #DENSITY_XXXHIGH} (640 dpi). 130a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn * This is not a density that applications should target, instead relying 131a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn * on the system to scale their {@link #DENSITY_XXXHIGH} assets for them. 132a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn */ 133a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn public static final int DENSITY_560 = 560; 134a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn 135a3fb40d5f492825bb86769f541620baca5616e05Dianne Hackborn /** 13656a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn * Standard quantized DPI for extra-extra-extra-high-density screens. Applications 13756a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn * should not generally worry about this density; relying on XHIGH graphics 13856a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn * being scaled up to it should be sufficient for almost all cases. A typical 13956a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn * use of this density would be 4K television screens -- 3840x2160, which 14056a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn * is 2x a traditional HD 1920x1080 screen which runs at DENSITY_XHIGH. 14156a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn */ 14256a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn public static final int DENSITY_XXXHIGH = 640; 14356a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn 14456a2301c7a1169a0692cadaeb48b9a6385d700f5Dianne Hackborn /** 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The reference density used throughout the system. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 147a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn public static final int DENSITY_DEFAULT = DENSITY_MEDIUM; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1492e3d3b9ce74cb9c906e5cc0e9898d757d45c4237Mitsuru Oshima /** 150908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * Scaling factor to convert a density in DPI units to the density scale. 151908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * @hide 152908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn */ 153908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public static final float DENSITY_DEFAULT_SCALE = 1.0f / DENSITY_DEFAULT; 154908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn 155908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn /** 156d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * The device's current density. 157d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * <p> 158d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * This value reflects any changes made to the device density. To obtain 159d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * the device's stable density, use {@link #DENSITY_DEVICE_STABLE}. 160d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * 161d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * @hide This value should not be used. 162d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * @deprecated Use {@link #DENSITY_DEVICE_STABLE} to obtain the stable 163d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * device density or {@link #densityDpi} to obtain the current 164d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * density for a specific display. 1652e3d3b9ce74cb9c906e5cc0e9898d757d45c4237Mitsuru Oshima */ 166908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn @Deprecated 167dde331cebd87982faded6818ad5f9927ff994c96Dianne Hackborn public static int DENSITY_DEVICE = getDeviceDensity(); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 170d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * The device's stable density. 171d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * <p> 172d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * This value is constant at run time and may not reflect the current 173d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * display density. To obtain the current density for a specific display, 174d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette * use {@link #densityDpi}. 175d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette */ 176d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette public static final int DENSITY_DEVICE_STABLE = getDeviceDensity(); 177d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette 178d7bbc8a92f101575d92dee1bbc47519c36666bd1Alan Viverette /** 1792beb8281d502fa6aa7b5abd398d50ff90d023596Andrii Kulian * The absolute width of the available display size in pixels. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int widthPixels; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1832beb8281d502fa6aa7b5abd398d50ff90d023596Andrii Kulian * The absolute height of the available display size in pixels. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int heightPixels; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The logical density of the display. This is a scaling factor for the 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Density Independent Pixel unit, where one DIP is one pixel on an 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen), 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing the baseline of the system's display. Thus on a 160dpi screen 1916b13bc043e715b5415b701e93141daa0d49fa364Dirk Dougherty * this density value will be 1; on a 120 dpi screen it would be .75; etc. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This value does not exactly follow the real screen size (as given by 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the overall UI in steps based on gross changes in the display dpi. For 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * example, a 240x320 screen will have a density of 1 even if its width is 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1.8", 1.3", etc. However, if the screen resolution is increased to 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 320x480 but the screen size remained 1.5"x2" then the density would be 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * increased (probably to 1.5). 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 201a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn * @see #DENSITY_DEFAULT 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float density; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20511ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn * The screen density expressed as dots-per-inch. May be either 20611ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn * {@link #DENSITY_LOW}, {@link #DENSITY_MEDIUM}, or {@link #DENSITY_HIGH}. 20711ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn */ 20811ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn public int densityDpi; 20911ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn /** 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A scaling factor for fonts displayed on the display. This is the same 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as {@link #density}, except that it may be adjusted in smaller 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * increments at runtime based on a user preference for the font size. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float scaledDensity; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exact physical pixels per inch of the screen in the X dimension. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float xdpi; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exact physical pixels per inch of the screen in the Y dimension. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float ydpi; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22481e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn /** 22581e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * The reported display width prior to any compatibility mode scaling 22681e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * being applied. 22781e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * @hide 22881e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn */ 2292b31d53161789358de57fd396716a6503855c5daDianne Hackborn public int noncompatWidthPixels; 23081e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn /** 23181e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * The reported display height prior to any compatibility mode scaling 23281e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * being applied. 23381e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn * @hide 23481e56d535c853d73ff537357da5b935f51cb779dDianne Hackborn */ 2352b31d53161789358de57fd396716a6503855c5daDianne Hackborn public int noncompatHeightPixels; 2362b31d53161789358de57fd396716a6503855c5daDianne Hackborn /** 2372b31d53161789358de57fd396716a6503855c5daDianne Hackborn * The reported display density prior to any compatibility mode scaling 2382b31d53161789358de57fd396716a6503855c5daDianne Hackborn * being applied. 2392b31d53161789358de57fd396716a6503855c5daDianne Hackborn * @hide 2402b31d53161789358de57fd396716a6503855c5daDianne Hackborn */ 2412b31d53161789358de57fd396716a6503855c5daDianne Hackborn public float noncompatDensity; 2422b31d53161789358de57fd396716a6503855c5daDianne Hackborn /** 243908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * The reported display density prior to any compatibility mode scaling 244908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * being applied. 245908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn * @hide 246908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn */ 247908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn public int noncompatDensityDpi; 248908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn /** 2492b31d53161789358de57fd396716a6503855c5daDianne Hackborn * The reported scaled density prior to any compatibility mode scaling 2502b31d53161789358de57fd396716a6503855c5daDianne Hackborn * being applied. 2512b31d53161789358de57fd396716a6503855c5daDianne Hackborn * @hide 2522b31d53161789358de57fd396716a6503855c5daDianne Hackborn */ 2532b31d53161789358de57fd396716a6503855c5daDianne Hackborn public float noncompatScaledDensity; 2542b31d53161789358de57fd396716a6503855c5daDianne Hackborn /** 2552b31d53161789358de57fd396716a6503855c5daDianne Hackborn * The reported display xdpi prior to any compatibility mode scaling 2562b31d53161789358de57fd396716a6503855c5daDianne Hackborn * being applied. 2572b31d53161789358de57fd396716a6503855c5daDianne Hackborn * @hide 2582b31d53161789358de57fd396716a6503855c5daDianne Hackborn */ 2592b31d53161789358de57fd396716a6503855c5daDianne Hackborn public float noncompatXdpi; 2602b31d53161789358de57fd396716a6503855c5daDianne Hackborn /** 2612b31d53161789358de57fd396716a6503855c5daDianne Hackborn * The reported display ydpi prior to any compatibility mode scaling 2622b31d53161789358de57fd396716a6503855c5daDianne Hackborn * being applied. 2632b31d53161789358de57fd396716a6503855c5daDianne Hackborn * @hide 2642b31d53161789358de57fd396716a6503855c5daDianne Hackborn */ 2652b31d53161789358de57fd396716a6503855c5daDianne Hackborn public float noncompatYdpi; 266e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DisplayMetrics() { 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTo(DisplayMetrics o) { 27143097218433c4cd3385cdf6cc3f28b7edb6b30aaAdam Lesinski if (this == o) { 27243097218433c4cd3385cdf6cc3f28b7edb6b30aaAdam Lesinski return; 27343097218433c4cd3385cdf6cc3f28b7edb6b30aaAdam Lesinski } 27443097218433c4cd3385cdf6cc3f28b7edb6b30aaAdam Lesinski 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widthPixels = o.widthPixels; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project heightPixels = o.heightPixels; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project density = o.density; 27811ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn densityDpi = o.densityDpi; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scaledDensity = o.scaledDensity; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project xdpi = o.xdpi; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ydpi = o.ydpi; 2822b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatWidthPixels = o.noncompatWidthPixels; 2832b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatHeightPixels = o.noncompatHeightPixels; 2842b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatDensity = o.noncompatDensity; 285908aecc3a63c5520d5b11da14a9383f885b7d126Dianne Hackborn noncompatDensityDpi = o.noncompatDensityDpi; 2862b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatScaledDensity = o.noncompatScaledDensity; 2872b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatXdpi = o.noncompatXdpi; 2882b31d53161789358de57fd396716a6503855c5daDianne Hackborn noncompatYdpi = o.noncompatYdpi; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setToDefaults() { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widthPixels = 0; 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project heightPixels = 0; 294a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown density = DENSITY_DEVICE / (float) DENSITY_DEFAULT; 295a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown densityDpi = DENSITY_DEVICE; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scaledDensity = density; 297a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown xdpi = DENSITY_DEVICE; 298a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown ydpi = DENSITY_DEVICE; 299a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatWidthPixels = widthPixels; 300a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatHeightPixels = heightPixels; 301a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatDensity = density; 302a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatDensityDpi = densityDpi; 303a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatScaledDensity = scaledDensity; 304a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatXdpi = xdpi; 305a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown noncompatYdpi = ydpi; 306a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown } 307a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown 308a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown @Override 309a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown public boolean equals(Object o) { 310a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown return o instanceof DisplayMetrics && equals((DisplayMetrics)o); 311a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown } 312a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown 313a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown /** 314a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown * Returns true if these display metrics equal the other display metrics. 315a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown * 316a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown * @param other The display metrics with which to compare. 317a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown * @return True if the display metrics are equal. 318a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown */ 319a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown public boolean equals(DisplayMetrics other) { 3207ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn return equalsPhysical(other) 3217ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn && scaledDensity == other.scaledDensity 3227ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn && noncompatScaledDensity == other.noncompatScaledDensity; 3237ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn } 3247ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn 3257ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn /** 3267ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * Returns true if the physical aspects of the two display metrics 3277ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * are equal. This ignores the scaled density, which is a logical 3287ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * attribute based on the current desired font size. 3297ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * 3307ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * @param other The display metrics with which to compare. 3317ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * @return True if the display metrics are equal. 3327ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn * @hide 3337ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn */ 3347ac8bbddfcaa2539f6311be54323d22f2dcc4a35Dianne Hackborn public boolean equalsPhysical(DisplayMetrics other) { 335a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown return other != null 336a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && widthPixels == other.widthPixels 337a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && heightPixels == other.heightPixels 338a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && density == other.density 339a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && densityDpi == other.densityDpi 340a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && xdpi == other.xdpi 341a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && ydpi == other.ydpi 342a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatWidthPixels == other.noncompatWidthPixels 343a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatHeightPixels == other.noncompatHeightPixels 344a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatDensity == other.noncompatDensity 345a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatDensityDpi == other.noncompatDensityDpi 346a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatXdpi == other.noncompatXdpi 347a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown && noncompatYdpi == other.noncompatYdpi; 348a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown } 349a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown 350a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown @Override 351a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown public int hashCode() { 352a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown return widthPixels * heightPixels * densityDpi; 35358feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima } 35458feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima 35564f59342d41849bd365cb43fad7505d5e3daa417Mitsuru Oshima @Override 35658feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima public String toString() { 35758feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima return "DisplayMetrics{density=" + density + ", width=" + widthPixels + 35858feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima ", height=" + heightPixels + ", scaledDensity=" + scaledDensity + 35958feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima ", xdpi=" + xdpi + ", ydpi=" + ydpi + "}"; 36058feea74b42bbaaa0552d76af23873bdd0b5dca2Mitsuru Oshima } 3612a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner 3622a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner private static int getDeviceDensity() { 3632a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // qemu.sf.lcd_density can be used to override ro.sf.lcd_density 3642a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // when running in the emulator, allowing for dynamic configurations. 3652a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // The reason for this is that ro.sf.lcd_density is write-once and is 3662a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner // set by the init process when it parses build.prop before anything else. 3672a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner return SystemProperties.getInt("qemu.sf.lcd_density", 368a53b828635fce8b6b2d3e3377d74d72070056623Dianne Hackborn SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); 3692a578ae518ff3d8a2d4768b3d190e4702509e82cDavid 'Digit' Turner } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 371