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获取屏幕宽高与获取控件宽高(三种方法)相关推荐

  1. android listview 自定义控件,Android 自定义弹性ListView控件实例代码(三种方法)

    关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListView弹性效果的方法(基本上拿来就可以用),供大家参考: 弹性L ...

  2. android系统通过图片绝对路径获取URI的三种方法

    老马的技术博客 android系统通过图片绝对路径获取URI的三种方法 最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1. ...

  3. Android 手机app三种方法获取定位地址(自带API,外接SDK,获取外网IP)

    一.手机App定位在我看来有三种方法: 1.通过Android自带的API:LocationManager获取到经纬度,再通过Geocoder反地理位置查询到所在的地址. 2.外接SDK,如高德SDK ...

  4. 【Android开发】三种方法实现Button点击事件响应

    目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...

  5. android写入文件方法,Android 追加写入文件的三种方法

    一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...

  6. 流量节省模式 Android,这三种方法让你节省更多手机上网流量

    大多数手机用户应该都知道最基本的流量管理方式--没有Wi-Fi可用时就不看视频.不玩在线游戏.或者下载大型应用--除非你拥有不限流量套餐.但如果你在使用流量时已经很节约,但每个月的用量依然会超出流量套 ...

  7. Android中图片圆形设置三种方法介绍

    Android开发中经常会用到圆形图片,比如在用户头像设置,现在提供三种主要实现方式: 方案一:使用第三方图像框架 Fresco 1.添加依赖 dependencies {compile 'com.f ...

  8. Android数据存储和读取的三种方法

    Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...

  9. Framework事件机制—Android事件处理的三种方法

    1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...

  10. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

最新文章

  1. Tim Berners-Lee重新分散的新Web SOLID简介
  2. 批量修改linux换行格式,linux中sed命令批量修改
  3. Redis从入门到精通:初级篇(转)
  4. 惠普服务器查看主板型号,win10惠普主板型号查看图文教程
  5. .wav格式的声音文件怎么变成matlab 中的.mat文件
  6. 8051单片机的中断发送
  7. 薪资不如 Java、C,BAT 需求大,揭秘 Python 程序员跳槽现状!
  8. 3.5 重要的环境变量
  9. 阶段3 2.Spring_09.JdbcTemplate的基本使用_4 JdbcTemplate的CRUD操作
  10. python 谷歌翻译 api_调用谷歌翻译API
  11. Node.js七天搞定微信公众号(又名:Koa2实现电影微信公众号前后端开发)
  12. html中加pyecharts,如何在PPT中插入Pyecharts的图表?
  13. mysql 字段名 减号_MySQL表字段名不能包含减号
  14. Excel自动化数据报表制作
  15. 英特尔芯片漏洞比想象中更严重:控制计算机无需密码
  16. PDF怎么编辑修改内容?教你一招轻松搞定
  17. 异常检测(Anomaly Detection)综述
  18. Sqlserver修改表结构提示不允许保存更改。
  19. Bright Star - John Keats
  20. 配置MRTG监控网络流量简单方法

热门文章

  1. Spring Boot学习笔记:Spring Boot的Web功能
  2. 【codevs1281】Xn数列,矩阵乘法练习
  3. 20.校准相机——直接线性校准不均匀,直接线性校准变换,几何误差_3
  4. 二叉树C++ | 广度优先遍历(层级顺序遍历)_2
  5. 在linux系统中如何查看cpu,Linux中如何查看CPU的信息
  6. linux免密后还是要输密码,ssh配置免密后依然需要输入密码的问题解决及排查过程...
  7. 【英语学习】【WOTD】links 释义/词源/示例
  8. 《软硬件接口》课程大纲
  9. 怎么把一个网页作为背景套在另一个网页上_设计科技公司网站背景的六个小技巧...
  10. ABB机器人VGT文件_ABB机器人与焊机之间通讯方式