Android之获取屏幕的尺寸像素及获取状态栏标题栏高度
在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备。
今天我就来讲一下怎么得到当前设备的屏幕像素吧:
一、在Activity中:
Display display = getWindowManager().getDefaultDisplay();//得到当前屏幕的显示器对象
Point size = new Point();//创建一个Point点对象用来接收屏幕尺寸信息
display.getSize(size);//Point点对象接收当前设备屏幕尺寸信息
int width = size.x;//从Point点对象中获取屏幕的宽度(单位像素)
int height = size.y;//从Point点对象中获取屏幕的高度(单位像素)
Log.v("zxy", "width="+width+",height="+height);//width=480,height=854可知手机的像素是480x854的
二、不在Activity中:
通过WINDOW_SERVICE对象获得默认的Display对象
WindowManager wm = (WindowManager) Context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay();//然后获得屏幕像素就和第一个方法的一样了
三、如果没有getSize()方法,就通过getWidth()和getHeight()来获得,因为getSize()是新API引入的:
Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); // 获得宽度像素 int height = display.getHeight(); // 获得屏幕高度像素
上面这些代码,就是获得屏幕的尺寸信息的,然后可以通过所获取的宽度或高度去乘以一个百分比来设置一个控件的宽高,从而达到适配的作用。
当然还有一种方式获得屏幕的像素的,就是通过DisplayMetrics对象来获得,这个的意思就是获得一个界面度量对象,用来获得当前屏幕的高和宽,实现方式如下:
DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels;//获得屏幕高度 int width = metrics.widthPixels;//获得屏幕宽度
好了,获取屏幕的像素大小就说到这了,顺便补充一个常用的开发技术:
获取状态栏和标题栏的高度
废话不多说,直接贴代码吧:
Rect frame = new Rect();//创建一个空的矩形对象
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);//获得顶层窗口的装饰视图,即状态栏,然后把状态栏显示的框架填充给刚刚我们创建的矩形对象,再通过矩形对象来获取状态栏高度
int statusBarHeight = frame.top;// 获取状态栏高度:frame.top
Log.v("zxy1", statusBarHeight+"");//打印出来的值为:38,即状态栏高度为38px
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);// /获得根视图,
int allHeight = v.getTop();// 状态栏和标题栏的总高度
这样我们就获取了状态栏和状态栏加标题栏的总高度了,那么,显而易见,标题栏的高度就是用总高度减去状态栏的高度即可!!!【注】android屏幕都是以像素为单位的,进行相关计算或者设置宽高时注意转化单位,这里给出一个dp转px的方法:
public int Dp2Px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
直接拿来用就行啦~~~
转载请注明出处---------
Android之获取屏幕的尺寸像素及获取状态栏标题栏高度的更多相关文章
- IOS开发之——获取屏幕的尺寸及各模拟器代表的型号
获取屏幕尺寸 [[[UIScreen mainScreen] currentMode].size.width]; [[[UIScreen mainScreen] currentMode].size.h ...
- wift - 使用UIScreen类获取屏幕大小尺寸
UISreen类代表了屏幕,开发中一般用来获取屏幕相关的属性,例如获取屏幕的大小. 1 2 3 4 5 6 7 //获取屏幕大小 var screenBounds:CGRect = UIScreen. ...
- 如何计算android设备的屏幕物理尺寸
https://segmentfault.com/q/1010000002794179 通过android提供的接口,我们可以获取到如下的信息:int densityDpi = mContext.ge ...
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
//获取屏幕尺寸,不包括虚拟功能高度 getWindowManager().getDefaultDisplay().getHeight(); 获取屏幕原始尺寸高度,包括虚拟功能键高度, private ...
- javascript中获取屏幕尺寸
Javascript获取获取屏幕.浏览器窗口 ,浏览器,网页高度.宽度的大小 屏幕的有效宽:window.screen.availHeight屏幕的有效高:window.screen.availWid ...
- 获取屏幕宽高度与可视区域宽高度(availWidth、clientWidth、width、innerWidth)
经常会遇到需要获取屏幕宽度.高度,可视区域宽度.高度等问题,也就常跟这几个打交道,一不小心,还真爱弄混淆了. 先来列举下这几个吧: screen.availHeight.screen.availWid ...
- dp 密度 分辨率 屏幕 状态栏 标题栏 适配
一篇总结的非常完善的博文:http://www.jianshu.com/p/ec5a1a30694b 屏幕像素参数相关信息表格 屏幕级别 像素密度 每英寸像素数 通常分辨率 分辨率别称 默认 ...
- Android计量单位px,in,mm,pt,dp,dip,sp和获取屏幕尺寸与密度
###########################################Android计量单位########################################### px ...
- Android 获取屏幕尺寸与密度
android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533 结果很不靠谱,于是自己写了几行代码,亲 ...
随机推荐
- ●HDU 2871 Memory Control(Splay)
●赘述题目 四种操作: ○Reset:将整个内存序列清空. ○New a:在尽量靠左的位置新建一个长度为a的内存块,并输出改内存块起始位置.(各个内存块即使相邻也不会合并..) ○Free a:将a点 ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- [USACO08JAN]跑步Running
题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ...
- Python中内置函数的介绍
内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的 ...
- IOS charles抓包HTTP
charles通常用来截取本地的网络封包,但也可以用它来截取其他设备上的网络请求.本篇以IOS为例,讲解如何进行相应的操作. 1.charles上的设置 要截取iphone上的网络请求,我们要先将ch ...
- Mysql锁机制--并发事务带来的更新丢失问题
Mysql 系列文章主页 =============== 刚开始学习 Mysql 锁的时候,觉得 Mysql 使用的是行锁,再加上其默认的可重复读的隔离级别,那就应该能够自动解决并发事务更新的问题.可 ...
- sqlserver 按照特定值排序查询结果
select * from t_ss_student order by case when xm like '林%' then 1 else 2 end asc; 姓林的会排在前面
- Redis出现多线程调用时抛出 [B cannot be cast to java.lang.Long] 异常
原因分析: 多个线程同时调用了同一个jedis对象,导致内存数据被多个线程竞争,产生数据混乱 (或者大家都用通一个redis获取同一个实例,登录同一个账号使用缓存时报错) 解决方案:每个线程都new出 ...
- JAVA 第二天 关键字
一.标识符及字符集 Java语言规定标识符是以字母.下划线"_"或美元符号"$"开始,随后可跟数字.字母.下划线或美元符号的字符序列.Java标识符大小写敏感, ...
- 继承自 DevExpress 17.2 的自定义控件如何在工具箱显示
最近把DevExpress版本从13.1升级到了17.2,结果发现继承自DevExpress的自定义控件居然在工具箱中消失了,弄了两天还是没有任何头绪,部分自定义Dev控件可以正常出现,但大部分自定义 ...