当前位置: 首页 > 编程笔记 >

Android中获取控件宽高的4种方法集合

葛桐
2023-03-14
本文向大家介绍Android中获取控件宽高的4种方法集合,包括了Android中获取控件宽高的4种方法集合的使用技巧和注意事项,需要的朋友参考一下

借鉴自开发艺术

1.onWindowFocusChanged

这个方法会被调用多次,在View初始化完毕后会调用,当Activity的窗口得到焦点和失去焦点都会被调用一次(Activity继续执行和暂停执行时)。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
  super.onWindowFocusChanged(hasFocus);
  if (hasFocus) {
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
  }
}

2.view.post

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ViewGroup root = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.activity_main, null, false);
  setContentView(root);
  final View view = root;
  view.post(new Runnable() {
    @Override
    public void run() {
      int width = view.getMeasuredWidth();
      int height = view.getMeasuredHeight();
      Log.i(TAG, width + " " + height);
    }
  });
}

具体原理暂时还不懂,不过应该是view封装的异步回调初始化后,view的测绘多半也完成了,这是一个同步的过程。所以才可以接收到消息。

3.ViewTreeObserver

他有许多回调。比如当View树的状态发生改变或者View树内部的View可见性发现改变时,onGlobalLayout方法将被回调。

final View view = root;
ViewTreeObserver observer = view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    Log.i(TAG, width + " " + height);
  }
});

通过一种增加global listener又移除的方式,获取观察而来的消息。

4.view.measure

手动测绘,分3种情况:

一、match_parent

这个情况是获取不到的。构造这种情况的MeasureSpec需要知道父容器的剩余空间。

二、具体的数值(dp/px)

比如宽高都是100px,可以这样做:

View view = root;
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY);
view.measure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG, widthMeasureSpec + " " + heightMeasureSpec);

到这里为止了,这种方法不推荐,因为测出来发现有错误。

以上这篇Android中获取控件宽高的4种方法集合就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android获取文字高度的三种方法,包括了Android获取文字高度的三种方法的使用技巧和注意事项,需要的朋友参考一下 前言 本文是对获取文字高度整理和总结,参考资料源自 statcoverflow的一个回答。具体参看下面的参考链接 获取文字高度的三个方法 paint.getTextBounds(String text, int start, int end, Rect bound

  • 本文向大家介绍js获取图片宽高的方法,包括了js获取图片宽高的方法的使用技巧和注意事项,需要的朋友参考一下 本文分享多种js获取图片宽高的方法,并且通过实例进行分析,希望大家从中有所收获。 一、简陋的获取图片方式  结果如下: 宽高都是0的这个结果很正常,因为图片的相关数据都没有被加载前它的宽高默认就是0 于是可以这么优化! 二、onload后在打印  结果如下 通过onload就能获取到图片的宽

  • 本文向大家介绍Android 四种获取屏幕宽度的方法总结,包括了Android 四种获取屏幕宽度的方法总结的使用技巧和注意事项,需要的朋友参考一下 Android 四种获取屏幕宽度的方法 方法一: 方法二: 方法一与方法二获取屏幕宽度的方法类似,只是获取WindowManager 对象时的途径不同。 方法三: 方法四: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍写一个方法获取div的宽高相关面试题,主要包含被问及写一个方法获取div的宽高时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍PHP获取文件扩展名的4种方法,包括了PHP获取文件扩展名的4种方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP获取文件扩展名的4种方法。分享给大家供大家参考,具体如下: 希望本文所述对大家PHP程序设计有所帮助。

  • 本文向大家介绍javascript获取网页各种高宽及位置的方法总结,包括了javascript获取网页各种高宽及位置的方法总结的使用技巧和注意事项,需要的朋友参考一下 screen对象 获取屏幕的高宽(分辨率) window对象 获得窗口位置及大小 element对象 在介绍element对象各种高宽之前有必要解释一下盒模型 默认盒模型 box-sizing:content-box; 当不出现滚动

  • 本文向大家介绍javascript获取网页宽高方法汇总,包括了javascript获取网页宽高方法汇总的使用技巧和注意事项,需要的朋友参考一下 document.body.clientWidth - 网页可见区域宽 document.body.clientHeight - 网页可见区域高 document.body.offsetWidth - 网页可见区域宽,包括边线和滚动条的宽 document

  • 本文向大家介绍Android 获取屏幕的多种宽高信息的示例代码,包括了Android 获取屏幕的多种宽高信息的示例代码的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍了Android 获取屏幕的多种宽高信息的示例代码,分享给大家,具体如下: 包含的宽高信息如下图所示: 在模拟器上获取到的数据: 08-26 07:19:32.712 7834-7834/com.czy.screeninfo E