屏幕适配专题 关于分辨率,dp,density等
2013-03-18 15:34
381 查看
先来个公式: 实际的PX = dp/160 * dpi
又发现一个好方法getResources().getDimensionPixelSize(R.dimen.shop_ser_height) 传入一个dimen,用dp单位
在不同系统上自动转换为pixel
如:dimen为60dp,则在720p上得到120p(x2),480p机器上得到90p[b](x1.5),320p机上得到60p[b](x1).........[/b][/b]
=============
适配原则:20130422
mdpi的手机,若无mdpi包才找到原装不说明的layout包;---默认包最不优先
hdpi的手机,若无hdpi的包,有mdpi和xhdpi,则找xhdpi的包;---默认先向分辨率更高的查找
[b]xhdpi的手机,若无xhdpi的包,只有hdpi和更低的分辨率,则找hdpi的包;---没有更高分辨率的,则找分辨率低的最少的[/b]
=======
块1,屏幕的density一般为
300--xhdpi; 如4.5寸的1280x720
240--hdpi; 如4.0寸的800x480---4.3寸的960x540
160---mdpi; 如3.2,3.5的480x320
120---ldpi; 如240x320
(视网膜分辨率为300dpi)
块2,换算: dp=dip=density-igore pixels
dip(value)=(int) (px(value)/1.5 + 0.5) ???
实际上当160dpi时,1px=1dp,
当240dpi时,1dp=160/240 px=2/3px
所以如果用px的单位,当160dpi时用60,当240dpi时为90。
this.getResources().getDisplayMetrics().density可获得系统当前DPI, 160DPI为1,120DPI为0.75,240DPI为1.5。
块3,相关的一个例子:
![](http://images.cnitblog.com/blog/500855/201303/18155322-80f2577bf4e1426cbd7e2161238809a4.png)
又发现一个好方法getResources().getDimensionPixelSize(R.dimen.shop_ser_height) 传入一个dimen,用dp单位
在不同系统上自动转换为pixel
如:dimen为60dp,则在720p上得到120p(x2),480p机器上得到90p[b](x1.5),320p机上得到60p[b](x1).........[/b][/b]
=============
适配原则:20130422
mdpi的手机,若无mdpi包才找到原装不说明的layout包;---默认包最不优先
hdpi的手机,若无hdpi的包,有mdpi和xhdpi,则找xhdpi的包;---默认先向分辨率更高的查找
[b]xhdpi的手机,若无xhdpi的包,只有hdpi和更低的分辨率,则找hdpi的包;---没有更高分辨率的,则找分辨率低的最少的[/b]
=======
块1,屏幕的density一般为
300--xhdpi; 如4.5寸的1280x720
240--hdpi; 如4.0寸的800x480---4.3寸的960x540
160---mdpi; 如3.2,3.5的480x320
120---ldpi; 如240x320
(视网膜分辨率为300dpi)
块2,换算: dp=dip=density-igore pixels
dip(value)=(int) (px(value)/1.5 + 0.5) ???
实际上当160dpi时,1px=1dp,
当240dpi时,1dp=160/240 px=2/3px
所以如果用px的单位,当160dpi时用60,当240dpi时为90。
this.getResources().getDisplayMetrics().density可获得系统当前DPI, 160DPI为1,120DPI为0.75,240DPI为1.5。
块3,相关的一个例子:
![](http://images.cnitblog.com/blog/500855/201303/18155322-80f2577bf4e1426cbd7e2161238809a4.png)
box.removeAllViews();//box is container, View.inflate 来生成View box.addView(View.inflate(ShopMainActivity.this, R.layout.shop_service, null)); LinearLayout shopService = (LinearLayout)findViewById(R.id.shop_service); //shop_service是ListView所在页面 //以下一段代码动态生成一个ListView,动态设置页面长度,如果不这样ListView会与ScrollView冲突 ListView serviceListView = new ListView(ShopMainActivity.this); serviceListView.setBackgroundResource(R.drawable.table_style); serviceListView.setPadding(8, 0, 8, 0); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.height = (int) (6*(61*(ShopMainActivity.this.getResources().getDisplayMetrics().density))) ; serviceListView.setLayoutParams(params); shopService.addView(serviceListView); //设置Adapter List<Map<String,String>> serviceList = new ArrayList<Map<String,String>>(); for(int i=0;i<6;i++){ Map<String,String> map = new HashMap<String,String>(); map.put("name", "更换机油"); map.put("detail", "更换机油免费30项检查,不分车价工时30元x6"); serviceList.add(map); } SimpleAdapter serviceAdapter = new SimpleAdapter(ShopMainActivity.this,serviceList, R.layout.shop_service_row,new String[]{"name" , "detail"}, new int[]{R.id.shop_service_name , R.id.shop_service_detail}); serviceListView.setAdapter(serviceAdapter); break;
相关文章推荐
- Android屏幕适配问题,dip,px,dpi,ppi,sp,density,分辨率,尺寸详细解释及转换
- 关于屏幕适配以及dp、dpi的总结
- dp 密度 分辨率 屏幕 状态栏 标题栏 适配
- 屏幕适配,彻底理解dp,dpi,屏幕密度,分辨率之间的爱恨纠葛
- 屏幕尺寸,像素,分辨率,dpi,dp,density详解
- 关于Android中涉及屏幕适配的单位dp,px,sp,dip的学习笔记。
- Android屏幕分辨率的问题,dp,px,density等概念
- Android,关于设备独立像素(dip/dp),关于机型屏幕适配
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源码,关于dpi的区分的值
- 关于Android 奇葩分辨率相同屏幕密度下适配问题若干
- Android屏幕适配关于dp
- 关于android分辨率兼容(屏幕适配)问题
- 关于android分辨率兼容(屏幕适配)问题
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源代码,关于dpi的区分的值
- Android 屏幕适配——关于布局文件中dp 的使用
- 关于iPhone屏幕尺寸、分辨率及适配
- Android之px/dpi/dip/dp/density/DisplayMetrics和屏幕适配
- 安卓笔记:dpi 、 dip 、dp、分辨率、屏幕尺寸、px、density
- Android屏幕适配 px,dp,dpi及density的关系与深入理解
- android 关于屏幕适配