在调试产品的时候经常会遇到因为LCD屏分辨率不一样而导致UI显示过大或过小的情况,修改了属性系统中的变量ro.sf.lcd_density(device_base.mk),根据对应的屏幕增大或减小对应的值,问题一般都能解决。

在frameworks/base/core/java/android/util/DisplayMetrics.java文件中会去获取这个属性的值

public static final int DENSITY_DEVICE = getDeviceDensity();


private static int getDeviceDensity() {        // qemu.sf.lcd_density can be used to override ro.sf.lcd_density        // when running in the emulator, allowing for dynamic configurations.        // The reason for this is that ro.sf.lcd_density is write-once and is        // set by the init process when it parses build.prop before anything else.        return SystemProperties.getInt("qemu.sf.lcd_density",                SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));    }


density表示显示密度,表示每英寸有多少个显示点,但是这个显示点与分辨率中的像素点是不一样的。

QVGA屏的density=120(两个点对应一个分辨率),使用res/xxx-ldpi目录下的资源

HGVA屏的density=160(三个点对应两个分辨率),使用res/xxx-mdpi目录下的资源(默认采用此目录)

WVGA(800x480)屏的density=240(一个点对应一个分辨率),使用res/xxx-hdpi目录下的资源


在应用程序界面设计时会用到这些概念

dip: device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

px: pixels(像素) 屏幕上的点,不同设备不同的显示屏显示效果相同,这是绝对像素,是多少就永远是多少不会改变。

根据不同的手机屏幕,UI实际占据的像素计算公式 pixs = dips * (density/160)。这样能解决UI适应手机屏幕大小的问题

所以根据google的推荐,像素统一使用dip,字体统一使用sp

sp:scaled pixels — best for text size (放大像素)(与刻度无关的像素):主要处理字体的大小。与dip类似,但是可以根据用户的字体大小首选项进行缩放。



更多相关文章

  1. 关于Android(安卓)打开新的Activity 虚拟键盘的弹出与不弹出
  2. ListView中显示圆形图像
  3. Android(安卓)JNI的使用 显示Hello Word
  4. Android界面设计专业术语:xxxhdpi和4K分辨率
  5. Android基础控件之基本属性
  6. android listview 中 item显示表格样式
  7. Android:通过SpannableString为TextView设置丰富的显示效果
  8. 安卓屏幕完美适配方案
  9. Android(安卓)弹无虚发之第五弹:来点儿不一样的Toast(自定义Toast,

随机推荐

  1. Android 关于RatingBar评分条
  2. Android ORM 框架之 Android中ORMLite应
  3. Android Studio 环境搭建 与相关问题解决
  4. Xamarin.Android 上中下布局
  5. Mac下搭建 Android(安卓)反编译环境
  6. android sample之Notepad(带下划线的Test
  7. Android MediaCodec H264编码设置Main Pr
  8. 在 Eclipse 中导入 Android 示例程序
  9. Android 横竖屏切换时候重新进行数据请求
  10. Android安卓应用版本命名规范