android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)
1.获取屏幕宽高
方法1:
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p)
Log.e(TAG + " getDefaultDisplay","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
方法2:
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics","xdpi=" + xdpi + "; ydpi=" + ydpi);
Log.e(TAG + " DisplayMetrics","density=" + density + "; densityDPI=" + densityDPI);
screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px)
Log.e(TAG + " DisplayMetrics(111)","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
方法3:
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
xdpi = dm.xdpi;
ydpi = dm.ydpi;
Log.e(TAG + " DisplayMetrics","density=" + density + "; densityDPI=" + densityDPI);
int screenWidthDip = dm.widthPixels; // 屏幕宽(dip,如:320dip)
int screenHeightDip = dm.heightPixels; // 屏幕宽(dip,如:533dip)
Log.e(TAG + " DisplayMetrics(222)","screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip);
screenWidth = (int)(dm.widthPixels * density + 0.5f); // 屏幕宽(px,如:480px)
screenHeight = (int)(dm.heightPixels * density + 0.5f); // 屏幕高(px,如:800px)
Log.e(TAG + " DisplayMetrics(222)","screenWidth=" + screenWidth + "; screenHeight=" + screenHeight);
2.获取控件的宽高,一般来说,我们在onCreate里面得到的控件的宽高全是0.采用下面的方法,可以得到真实的宽高
方法一 :
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
imageView.measure(w,h);
int height =imageView.getMeasuredHeight();
int width =imageView.getMeasuredWidth();
textView.append("\n"+height+","+width);
此方法会加载onMeasure三次
方法二 :
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
int height = imageView.getMeasuredHeight();
int width = imageView.getMeasuredWidth();
textView.append("\n"+height+","+width);
return true;
}
});
此方法会加载onMeasure二次,但是回调函数会回调很多次
方法三:
ViewTreeObserver vto2 = imageView.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth());
}
});
此方法会加载onMeasure二次,但是回调函数只回调一次
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧!
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)相关推荐
- android listview 自定义控件,Android 自定义弹性ListView控件实例代码(三种方法)
关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性L ...
- android系统通过图片绝对路径获取URI的三种方法
老马的技术博客 android系统通过图片绝对路径获取URI的三种方法 最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1. ...
- Android 手机app三种方法获取定位地址(自带API,外接SDK,获取外网IP)
一.手机App定位在我看来有三种方法: 1.通过Android自带的API:LocationManager获取到经纬度,再通过Geocoder反地理位置查询到所在的地址. 2.外接SDK,如高德SDK ...
- 【Android开发】三种方法实现Button点击事件响应
目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...
- android写入文件方法,Android 追加写入文件的三种方法
一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...
- 流量节省模式 Android,这三种方法让你节省更多手机上网流量
大多数手机用户应该都知道最基本的流量管理方式--没有Wi-Fi可用时就不看视频.不玩在线游戏.或者下载大型应用--除非你拥有不限流量套餐.但如果你在使用流量时已经很节约,但每个月的用量依然会超出流量套 ...
- Android中图片圆形设置三种方法介绍
Android开发中经常会用到圆形图片,比如在用户头像设置,现在提供三种主要实现方式: 方案一:使用第三方图像框架 Fresco 1.添加依赖 dependencies {compile 'com.f ...
- Android数据存储和读取的三种方法
Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...
- Framework事件机制—Android事件处理的三种方法
1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
最新文章
- Tim Berners-Lee重新分散的新Web SOLID简介
- 批量修改linux换行格式,linux中sed命令批量修改
- Redis从入门到精通:初级篇(转)
- 惠普服务器查看主板型号,win10惠普主板型号查看图文教程
- .wav格式的声音文件怎么变成matlab 中的.mat文件
- 8051单片机的中断发送
- 薪资不如 Java、C,BAT 需求大,揭秘 Python 程序员跳槽现状!
- 3.5 重要的环境变量
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_4 JdbcTemplate的CRUD操作
- python 谷歌翻译 api_调用谷歌翻译API
- Node.js七天搞定微信公众号(又名:Koa2实现电影微信公众号前后端开发)
- html中加pyecharts,如何在PPT中插入Pyecharts的图表?
- mysql 字段名 减号_MySQL表字段名不能包含减号
- Excel自动化数据报表制作
- 英特尔芯片漏洞比想象中更严重:控制计算机无需密码
- PDF怎么编辑修改内容?教你一招轻松搞定
- 异常检测(Anomaly Detection)综述
- Sqlserver修改表结构提示不允许保存更改。
- Bright Star - John Keats
- 配置MRTG监控网络流量简单方法
热门文章
- Spring Boot学习笔记:Spring Boot的Web功能
- 【codevs1281】Xn数列,矩阵乘法练习
- 20.校准相机——直接线性校准不均匀,直接线性校准变换,几何误差_3
- 二叉树C++ | 广度优先遍历(层级顺序遍历)_2
- 在linux系统中如何查看cpu,Linux中如何查看CPU的信息
- linux免密后还是要输密码,ssh配置免密后依然需要输入密码的问题解决及排查过程...
- 【英语学习】【WOTD】links 释义/词源/示例
- 《软硬件接口》课程大纲
- 怎么把一个网页作为背景套在另一个网页上_设计科技公司网站背景的六个小技巧...
- ABB机器人VGT文件_ABB机器人与焊机之间通讯方式