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", "xdpi=" + xdpi + "; ydpi=" + 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二次,但是回调函数只回调一次  

 

 

转载于:https://www.cnblogs.com/ganchuanpu/p/6505579.html

android获取屏幕宽高与获取控件宽高相关推荐

  1. android获取控件宽和高

    Android获取控件宽高 在项目中用到了测量控件的宽和高,这个在Activity的onCreate去使用控件的getHeight()和getWidth()方法去获取是会失败的,返回的都是0.这是由于 ...

  2. Android动态设置控件宽高和padding

    在开发过程中我们经常需要动态设置控件的宽高和padding.以TextView为例.如下: 布局代码 TextView的默认宽高为包裹文字,添加了一个背景颜色设置参数后更直观看到效果 <?xml ...

  3. android 代码控件框高,Android控件_TextView(显示文本框控件)

    一.TextView控件的常用属性 1.android:id--控件的id 2.android:layout_width--设置控件的宽度 wrap_content(包裹实际文本内容) fill_pa ...

  4. 原生js获取以固定字符开头的控件id,并设置属性

    原生js获取以固定字符开头的控件id,并设置属性 还在用JQ加CSS选择器获取指定id开头的DOM嘛? 现在试试 JavaScript提供的querySelectorAll函数 目前几乎主流浏览器均支 ...

  5. 根据获取的窗口句柄遍历窗口Edit控件

    网上说遍历窗口控件有两种方法: 1),使用EnumChildWindows,没有深究,     学习网址如下: http://blog.sina.com.cn/s/blog_60ac1c4b01011 ...

  6. android 固定底部 布局_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  7. android listview添加数据_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  8. Android图片海报制作-自定义文字排版控件组件

    项目地址:https://github.com/coolstar1204/MakePoster 今天主要讲一下项目主要控件,文字排版控件组,实现类似QQ音乐歌词海报效果. 控件主要功能点 可设置背景图 ...

  9. Android基础学习(二)—— 常用控件

    TextView 显示文本内容 Button 按钮 EditText 输入框 ImageView 显示图片 ProgressBar 进度条 ToolBar 自定义标题栏 AlertDialog 对话框 ...

  10. 【android免root脚本制作】基于控件的操作——auto.js进阶

    在[android免root脚本制作]自动坐标操作手机--京东金融程序金果摇钱树自动收金果 之后,想要做进一步优化,因为基于坐标点击如何屏幕被移动之类就会点击错位,不同手机还需去适配坐标,甚是麻烦,所 ...

最新文章

  1. 复合数值积分方法以及Python程序实现
  2. 关于服务器端控件的attributes属性的奇怪问题
  3. Android中RatingBar的自定义效果
  4. Vue项目构建设计说明
  5. Qt中另一种创建线程的方式
  6. 设计模式C++实现(15)——观察者模式
  7. mybatis中$和#的区别
  8. UNIX再学习 -- 进程间通信之管道
  9. 【面试】JAVA六种运算符详解及优先级
  10. java环境变量的配置与详解,这些知识你必须拿下
  11. 再论C++之垃圾回收(GC)
  12. 诺微联盟催生智能手机的三足鼎立
  13. oracle 数据补齐月份,Oracle自定义函数--增加月份
  14. 【eoe 1】获取Android源代码
  15. Android.mk 语法详解
  16. 涉密计算机多用户审批表,涉密计算机及信息系统安全策略
  17. resultMap和resultType的整体的区别和联系
  18. 你还在用二分法求2个鸡蛋100层楼的问题吗?
  19. Cors跨域(二):实现跨域Cookie共享的三要素
  20. 蓝队-Windows操作系统

热门文章

  1. TensorFlow2.0(二)--Keras构建神经网络分类模型
  2. 7-9 用天平找小球 (10 分)
  3. 求链表的倒数第m个元素
  4. git fork clone 区别_我的Git笔记
  5. java 字符串拆分技巧_在java中如何拆分一个字符串?
  6. unity控制程序等待_Unity 中的协同程序
  7. 六元均匀直线阵的各元间距为_小间距led显示屏的封装方式有哪些?本文带你了解!...
  8. es6新特性之Map
  9. php 编辑config.php配置文件
  10. Spring MVC重定向和转发