DisplayMetric 功能 屏幕 固定尺寸 dp
来源:互联网 发布:python课程设计代码 编辑:程序博客网 时间:2024/06/07 21:05
displayMetric: 翻译为: 显示的尺寸第一种写法: DisplayMetrics dm = getResources().getDisplayMetrics();第二种: DisplayMetrics dm = new DisplayMetrics();float scale = context.getResources().getDisplayMetrics().density;getWindowManager().getDefaultDisplay().getMetrics(dm);如果你在setcontentview之前调用getResources().getDisplayMetrics();获取到的宽高就是不准确的,因为那时候你的资源文件还没有载入内存,而windowmanager获取到的宽高就可以,因为activity是和窗口关联着的,启动activity意味着你已经得到了窗口属性,所以可以争取获得宽高。
=======================================================================================
- DisplayMetrics metric = new DisplayMetrics();
- //API 17之后使用,获取的像素宽高包含虚拟键所占空间,在API 17之前通过反射获取
- context.getWindowManager().getDefaultDisplay().getRealMetrics(metric);
- //获取的像素宽高不包含虚拟键所占空间
- //context.getWindowManager().getDefaultDisplay().getMetrics(metric);
- int width = metric.widthPixels; // 宽度(像素)
- int height = metric.heightPixels; // 高度(像素)
- float density = metric.density; // dp缩放因子
- int densityDpi = metric.densityDpi; // 广义密度
- float xdpi = metric.xdpi;//x轴方向的真实密度
- float ydpi = metric.ydpi;//y轴方向的真实密度
(名词详细解释:http://xiaoyaozjl.iteye.com/blog/2178415)
getRealMetrics()和getMetrics()获取到的屏幕信息差别只在于widthPixels或heightPixels的值是否去除虚拟键所占用的像素,和是否全屏和沉浸模式无关。
屏幕高度值包含了状态栏的像素,非沉浸模式下真实的Activity高度需要减去状态栏的高度。获取状态栏高度代码:
- private int getStatusBarHeight() {
- Rect rect = new Rect();
- getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
- return rect.top;
- }
屏幕参数Width和Height的值和屏幕方向有关,另外4个值和屏幕方向无关。
==========================================================================
延伸的公式:
- //API 17之后使用,获取的像素宽高包含虚拟键所占空间,在API 17之前通过反射获取
- context.getWindowManager().getDefaultDisplay().getRealMetrics(metric);
- //获取的像素宽高不包含虚拟键所占空间
- //context.getWindowManager().getDefaultDisplay().getMetrics(metric);
屏幕的dp数:
widthDps = widthPixels * 160 / density = widthPixels / factor
heightDps = heightPixels * 160 / density = heightPixels / factor
维持widget在不同密度屏幕的比例:
所谓维持比例也就是说widget尺寸和屏幕尺寸的比值相同,有
WidgetWidthDpA / ScreenWidthDpA = WidgetWidthDpB / ScreenWidthDpB ,那么
WidgetWidthDpB = WidgetWidthDpA * ScreenWidthDpB / ScreenWidthDpA ,或
WidgetWidthDpB = WidgetWidthDpA * rate
其中rate = (screenWidthPixelsB / densityB) / (screenWidthPixelsA / densityA)
实际使用中,因为这个比值不仅和广义密度比有关并且和分辨率比有关,要完整适配所有设备比较困难,一般推荐使用空白区变长的方法完成适配而不是维持画面比例。
===================================widthDps = widthPixels * 160 / density = widthPixels / factor
heightDps = heightPixels * 160 / density = heightPixels / factor
维持widget在不同密度屏幕的比例:
所谓维持比例也就是说widget尺寸和屏幕尺寸的比值相同,有
WidgetWidthDpA / ScreenWidthDpA = WidgetWidthDpB / ScreenWidthDpB ,那么
WidgetWidthDpB = WidgetWidthDpA * ScreenWidthDpB / ScreenWidthDpA ,或
WidgetWidthDpB = WidgetWidthDpA * rate
其中rate = (screenWidthPixelsB / densityB) / (screenWidthPixelsA / densityA)
实际使用中,因为这个比值不仅和广义密度比有关并且和分辨率比有关,要完整适配所有设备比较困难,一般推荐使用空白区变长的方法完成适配而不是维持画面比例。
最重要的来了:
手机看到的 宽高是固定的 width=320dp,height=480dp;
负的在屏幕的左边,大于320的在屏幕的右边,这些是你看不到的;高也可以类推你懂。
float scale = context.getResources().getDisplayMetrics().density;
float widthPx=dp*scale + 0.5f;//dp 转px 0 0
- DisplayMetric 功能 屏幕 固定尺寸 dp
- android6.0 固定屏幕功能
- Android 5.0 Screen pinning 屏幕固定功能
- 屏幕尺寸
- android dp sp px区别,android获取屏幕尺寸、密度
- 屏幕尺寸,像素,分辨率,dpi,dp,density详解
- Android-Android5.1屏幕固定功能(screen pinning)分析
- app尺寸,屏幕尺寸,屏幕分辨率
- 如何解决固定宽度尺寸网页,在小屏幕下背景色无法填充完整的问题
- 获取屏幕布尺寸
- JS的屏幕尺寸
- 获取屏幕尺寸大小
- 手机 : 屏幕尺寸
- 如何获得屏幕尺寸
- Android各种屏幕尺寸
- Android 获取屏幕尺寸
- Cocoa Iphone 屏幕尺寸
- wince获得屏幕尺寸
- vs2010为项目添加库文件目录、添加包含文件目录
- 腾讯云TAB缘何一跃成为开发者新宠?
- 【HDU5727 2016 Multi-University Training Contest 1E】【状压DP做法 匈牙利匹配做法】Necklace n阳n阴排成环 特定相邻会抑郁 问最少抑郁阳球数
- PHP生成唯一会员卡号
- ETL 浅谈
- DisplayMetric 功能 屏幕 固定尺寸 dp
- Mysql中查询系统时间
- 【Android基础知识】Notification的使用
- flowplayer播放需求
- 设计模式之工厂模式
- 排序算法、时间复杂度与信息熵
- jquery easyui datagrid使用参考
- ios 常用放法、设置
- 2016微软探星夏令营在线技术笔试题解(1)