获取Android控件的宽和高
2016-01-22 09:05
411 查看
转自 《Android开发艺术探索》。
一
/** * view 初始化完毕,宽高已经确定。<br/> * 当 Activity 的窗口得到和失去焦点的时候,这个方法均会被调用。<br/> * 频繁调用 onResume 和 onPause 这个方法也会被频繁调用。 * @param hasFocus */ @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight(); } }
二
@Override protected void onStart() { super.onStart(); /* 通过 post 可以将一个 Runnable 投递到消息队列的尾部。等到用的时候 view 也初始化好了。 */ view.post(new Runnable() { @Override public void run() { int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight(); } }); }
三
@Override protected void onStart() { super.onStart(); /* 当 view树 的状态发生改变或者 View 树内部的 View 可见性发生改变时, onGlobalLayout 会被回调。*/ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { view.getViewTreeObserver().removeOnGlobalLayoutListener(this); int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight(); } }); } }
四, measure
具体数值
/* 比如宽高是100px */ int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY); int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY); view.measure(widthMeasureSpec, heightMeasureSpec); int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight();
wrap_content
/* view 的尺寸是使用20位二进制表示(最大是30个1,即 2的30次方-1 ,也就是 (1 << 30) - 1 */ int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST); int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST); view.measure(widthMeasureSpec, heightMeasureSpec); int width = view.getMeasuredWidth(); int height = view.getMeasuredHeight();
match_parent不可用
相关文章推荐
- Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读
- Android spinner控件
- 2.3 Android程序中的关键文件
- [Android4.4]netd启动流程
- android-studio 离线安装
- Android studio 搭建 Svn 及文件忽略
- Android TextView控件 之滚动文字效果
- Android Studio Logcat的使用
- Android 消息机制源码分析
- 【Android】程序的安装、卸载和更新详解
- Layout inflation在Android环境中是一个专业术语,用于表示某个XML资源布局文件被解析并转化成为一个层级的View对象的过程。
- Android HorizontalScrollView 仿QQ侧滑
- 2015年Android开发新技术小结
- 2016年01月广师android群内容分享
- Android中通过资源名称获取对应的ID
- Android ORMLite的使用
- android相机区域拍照,快速集成
- Android 4.4 图库选择图片 路径 出错
- 加快Android Studio/Gradle构建速度
- android studio 导入项目错误