OnGlobalLayoutListener获得一个视图的高度和宽度
来源:互联网 发布:大数据挖掘软件 编辑:程序博客网 时间:2024/06/06 03:03
我们知道在oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件布局要在onResume回调后完成。所以现在需要使用getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。这是获得一个view的宽度和高度的方法之一。
OnGlobalLayoutListener 是
其中,我们可以利用OnGlobalLayoutListener来获得一个视图的真实高度。
int mHeaderViewHeight;
mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
new
OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mHeaderViewHeight = mHeaderView.getHeight();
getViewTreeObserver()
.removeGlobalOnLayoutListener(
this
);
}
});
但是需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener注销掉。
正文
一、结构
java.lang.Object
android.view.ViewTreeObserver
二、概述
getViewTreeObserver()
以查看更多信息。三、内部类
interface ViewTreeObserver.OnGlobalFocusChangeListener
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interface ViewTreeObserver.OnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
四、公共方法
public void addOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener listener)
注册一个回调函数,当在一个视图树中的焦点状态发生改变时调用这个回调函数。
参数
listener 将要被添加的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void addOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener listener)
注册一个回调函数,当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时调用这个回调函数。
参数
listener 将要被添加的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void addOnPreDrawListener (ViewTreeObserver.OnPreDrawListener listener)
注册一个回调函数,当一个视图树将要绘制时调用这个回调函数。
参数
listener 将要被添加的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void addOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener listener)
注册一个回调函数,当一个视图发生滚动时调用这个回调函数。
参数
listener 将要被添加的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void addOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener listener)
注册一个回调函数,当一个触摸模式发生改变时调用这个回调函数。
参数
listener 将要被添加的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public final void dispatchOnGlobalLayout ()
当整个布局发生改变时通知相应的注册监听器。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在GONE状态下,它可以被手动的调用
public final boolean dispatchOnPreDraw ()
当一个视图树将要绘制时通知相应的注册监听器。如果这个监听器返回true,则这个绘制将被取消并重新计划。如果你强制对视图布局或者在一个没有附加到一个窗口的视图的层次结构或者在一个GONE状态下,它可以被手动的调用
返回值
当前绘制能够取消并重新计划则返回true,否则返回false。
public boolean isAlive ()
指示当前的ViewTreeObserver是否可用(alive)。当observer不可用时,任何方法的调用(除了这个方法)都将抛出一个异常。如果一个应用程序保持和ViewTreeObserver一个历时较长的引用,它应该总是需要在调用别的方法之前去检测这个方法的返回值。
返回值
但这个对象可用则返回true,否则返回false
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
移除之前已经注册的全局布局回调函数。
参数
victim 将要被移除的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void removeOnGlobalFocusChangeListener (ViewTreeObserver.OnGlobalFocusChangeListener victim)
移除之前已经注册的焦点改变回调函数。
参数
victim 将要被移除的回调函数
异常
IllegalStateException 如果isAlive() 返回falsepublic void removeOnPreDrawListener (ViewTreeObserver.OnPreDrawListener victim)
移除之前已经注册的预绘制回调函数。
参数
victim 将要被移除的回调函数
异常
IllegalStateException 如果isAlive() 返回false
public void removeOnScrollChangedListener (ViewTreeObserver.OnScrollChangedListener victim)
移除之前已经注册的滚动改变回调函数。
参数
victim 将要被移除的回调函数
异常
IllegalStateException 如果isAlive() 返回falsepublic void removeOnTouchModeChangeListener (ViewTreeObserver.OnTouchModeChangeListener victim)
移除之前已经注册的触摸模式改变回调函数
参数
victim 将要被移除的回调函数
异常
IllegalStateException 如果isAlive() 返回false- OnGlobalLayoutListener获得一个视图的高度和宽度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- OnGlobalLayoutListener获得一个视图的高度
- 获得一个视图的高度。OnGlobalLayoutListener获得一个视图的高度
- 获得一个视图的高度。OnGlobalLayoutListener获得一个视图的高度
- 获得一个视图的高度。OnGlobalLayoutListener获得一个视图的高度
- 通过OnGlobalLayoutListener获得视图的高度
- 如何获得一个字符的宽度和高度?
- Python垃圾回收机制
- atan2(a,b)和atan的区别
- [疯狂Java]UDP:UDP协议的概念
- 最全防止sql注入方法
- hdu4753Fishhead’s Little Game【状态压缩记忆化搜索+博弈】
- OnGlobalLayoutListener获得一个视图的高度和宽度
- k个最小的数
- linux dmesg命令参数及用法详解(linux显示开机信息命令)
- 路径转换
- 编译spark1.6.0出现 Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.4.0:exec (sparkr-pkg)
- Python——import
- JSP使用FCKeditor详解
- 1分钟教会你使用Gson 解析json数据
- centos系统ps命令详解