Android(density屏幕密度)
来源:互联网 发布:元和网络客服电话 编辑:程序博客网 时间:2024/04/29 21:59
做android开发已经有段时间了,android的多分辨率一直是个很头疼的问题。以前也多少碰到过,但是从来没有这次这么怪异,趁着这个机会,把之前了解的总结一下。
如何对应多分辨率,晚上有很多人总结过了,基本也就是这么几种
1,使用wrap_content,fill_parent,或者dp来布局,尽量不要使用px
之前看见过利用layout_weight重要度来布局,等分屏幕,这种方式也挺好的。
2,不同分辨率访问不同的文件夹
可以根据屏幕密度,分辨率,大小来命名不同的文件夹,不同的设备会访问不同的文件夹
例如:drawable-mdpi,drawable-hdpi-1280x800,drawable-large
同样layout等文件夹也可以利用这种方式。
介绍了这些基本概念,来说一下我这次碰到的问题,这次出问题的是平板,型号是GALAXY TAB,7英寸的,分辨率是1024*600
自己先通过android的模拟器进行测试过,没有什么问题,在drawable下面建立了一个drawable-mdpi-1024*600的文件夹,读取该文件夹下的图片。
但是实机的时候发现不对了,没有读取到,瞬间迷惑了,莫非是模拟器算错了屏幕密度。
在这里先解释下这么几个概念:
px:这是我们通常所说的像素,例如1024*768
dp:也就是dip,表示独立像素,是根据px和dpi来决定的,px = dp * (dpi / 160)
density:屏幕密度,等于dpi/160
dpi:每英寸像素数 dpi= /屏幕尺寸
7英寸,1024*600分辨率,算出来dpi为169,density等于1,应该是mdpi,可以为什么读取了hdpi文件夹下的图片。
细细分析了下,android不可能自己来算dpi的,问题可能就出在这方面,打开源码后发现:
其实dpi是读取/system/build.prop文件夹下面ro.sf.lcd_density来设定的
从这个方法中可以看到,系统会去读系统的属性。先去读ro.sf..lcd_density,若存在,那么设置这个属性记录的density的值。否则,则取默认值也就是160。
1 private static int getDeviceDensity() { 2 // qemu.sf.lcd_density can be used to override ro.sf.lcd_density 3 // when running in the emulator, allowing for dynamic configurations. 4 // The reason for this is that ro.sf.lcd_density is write-once and is 5 // set by the init process when it parses build.prop before anything else. 6 return SystemProperties . getInt( " qemu.sf.lcd_density " , 7 SystemProperties . getInt( " ro.sf.lcd_density " , DENSITY_DEFAULT)); 8 }
终于明白了,其实不是屏幕密度算错了,而是手机里设置density这个值为240,才导致文件夹读取错误。
最后很感谢一直看到这的人。
- Android(density屏幕密度)
- Android屏幕密度(Density)和分辨率的解释
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的解释
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的解释
- Android屏幕密度(Density)和分辨率的解释
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率详解
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的解释
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- Android屏幕密度(Density)和分辨率的关系
- MySQL常用函数
- 用MapViewOfFile处理大文件-内存不足
- 深入理解JavaScript系列(19):求值策略(Evaluation strategy)
- JSTL之taglib
- SQLITE3 用.sql 配置文件生成 数据库
- Android(density屏幕密度)
- DW中ODS的解释
- 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
- 九度教程---------15
- notepad++关联文件图标空白的问题
- 把UltraEdit加入到右键菜单中
- SQL Server 通过SQL语句执行作业
- 专访刘伟:软件开发人员的内功修炼之道
- 九度OJ 1072 harsh处理清华机试之邮票面值总和