Android获取view高度的三种方式_Android

本文为大家分享了Android获取view高度的方法,供大家参考,具体内容如下

getMeasuredHeight()getHeight的区别
实际上在当屏幕可以包裹内容的时候,他们的值相等,
只有当view超出屏幕后,才能看出他们的区别:
getMeasuredHeight()是实际View的大小,与屏幕无关,
而getHeight的大小此时则是屏幕的大小。
当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小
具体方法
我们知道在oncreate中View.getWidth和View.getHeight无法获得一个view的高度和宽度,这是因为View组件 布局要在onResume回调后完成。
下面说三种方式
getViewTreeObserver
使用 getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度。
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。
除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:
interfaceViewTreeObserver.OnGlobalFocusChangeListener
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
其中,我们可以利用OnGlobalLayoutListener来获得一个视图的真实高度

private int mHeaderViewHeight;
private View mHeaderView; 

..... 

mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
 new OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() { 

   mHeaderViewHeight = mHeaderView.getHeight();
   mHeaderView.getViewTreeObserver()
     .removeGlobalOnLayoutListener(this);
  }
});

但是需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener注销掉。
View post事件中获取
还可以在VIew的post方法中获取

public class TestHeight extends Activity {
 TextView tv; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_activity_b);
   tv = (TextView) findViewById(R.id.textView);
  tv.post(new Runnable() {
   @Override
   public void run() {
    int height= tv.getHeight();
   }
  });
 } 

}

直接测量计算

int intw=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int inth=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
textView.measure(intw, inth);
int intwidth = textView.getMeasuredWidth();
int intheight = textView.getMeasuredHeight(); 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android获取view高度
, Android获取view
view高度
android 获取view高度、android 测量view高度、android view 高度、android webview 高度、android textview高度,以便于您获取更多的相关知识。

时间: 2024-12-30 16:48:08

Android获取view高度的三种方式_Android的相关文章

Android获取view高度的三种方式

本文为大家分享了Android获取view高度的方法,供大家参考,具体内容如下 getMeasuredHeight()与getHeight的区别 实际上在当屏幕可以包裹内容的时候,他们的值相等, 只有当view超出屏幕后,才能看出他们的区别: getMeasuredHeight()是实际View的大小,与屏幕无关, 而getHeight的大小此时则是屏幕的大小. 当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小 具体方法 我们知道在oncr

Action获取请求参数的三种方式_Android

方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被自动封装 到该几个属性中. 方式二:创建独立的Model对象,还是通过属性注入的方法将请求数据封装到Model对象中 具体为:另外创建一个专门的类,并在其中添加几个和请求参数名相同的属性,,此时,在表单中,需要讲参数名, 写成Model的一个具体对象名.参数名的方式,然后在Action中,需要定义一

Android实现View滑动的几种方式_Android

什么是View?实现View滑动的方式有哪些?1. 关于View我们需要知道的 (1)什么是View?     Android中的View类是所有UI控件的基类(Base class),也就是说我们平时所有到的各种UI控件,比如Button.ImagView等等都继承自View类.LinearLayout.FrameLayout等布局管理器的直接父类是ViewGroup,而ViewGroup也有View类派生.总的来说,View是对UI控件的抽象,它代表了屏幕上的一个矩形区域.通过继承View,

Action获取请求参数的三种方式

方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被自动封装 到该几个属性中. 方式二:创建独立的Model对象,还是通过属性注入的方法将请求数据封装到Model对象中 具体为:另外创建一个专门的类,并在其中添加几个和请求参数名相同的属性,,此时,在表单中,需要讲参数名, 写成Model的一个具体对象名.参数名的方式,然后在Action中,需要定义一

【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取   带着这个想法去看下面几种方式 =============================================================================================== 1>从spring boot默认的application.properties资

Android实现View滑动的几种方式

什么是View?实现View滑动的方式有哪些? 1. 关于View我们需要知道的 (1)什么是View? Android中的View类是所有UI控件的基类(Base class),也就是说我们平时所有到的各种UI控件,比如Button.ImagView等等都继承自View类.LinearLayout.FrameLayout等布局管理器的直接父类是ViewGroup,而ViewGroup也有View类派生.总的来说,View是对UI控件的抽象,它代表了屏幕上的一个矩形区域.通过继承View,并重写

asp.net c# 获取网页源码三种方式

C#获取指定网页HTML原代码可使用 WebClient WebRequest HttpWebRequest 三种方式来实现.WebClient private string GetWebClient(string url) { string strHTML =""; WebClient myWebClient =new WebClient(); Stream myStream = myWebClient.OpenRead(url); StreamReader sr =new Stre

Android中使用定时器的三种方法_Android

本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第一种方法:Thread.sleep();方法 Runnable runnable = new Runnable() { @Override public void run() { while (true) { mHandler.sendEmptyMessage(0); try { Thread.sl

Android 获得屏幕宽高的三种方式_Android

老风格,废话不多说了,直接给大家贴android获取屏幕宽高的代码了. 主要代码: package com.km.screeninfo; import android.os.Bundle; import android.support.v.app.Fragment; import android.support.v.app.FragmentActivity; import android.util.DisplayMetrics; import android.view.LayoutInflate