Android 获得view的宽和高

转自:http://blog.csdn.net/yangdeli888/article/details/25405263

在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实他们去得值是0,并不是你想要的结果?

这是为什么呢?

在调用oncreate()方法时,界面处于不可见状态,内存加载组件还没有绘制出来,你是无法获取他的尺寸。

那如何在绘制组件之前能获取到该组件的尺寸大小呢?

这里有三种方法,经过验证的:

方法一 :
//测量方法

?


1

2

3

4

5

int

width =View.MeasureSpec.makeMeasureSpec(
0,View.MeasureSpec.UNSPECIFIED);

int

height =View.MeasureSpec.makeMeasureSpec(
0,View.MeasureSpec.UNSPECIFIED);

view.measure(width,height);

int

height=view.getMeasuredHeight();

int

width=view.getMeasuredWidth();

方法二 :

?


1

2

3

4

5

6

7

8

9

//增加组件绘制之前的监听

ViewTreeObserver
vto =view.getViewTreeObserver();

vto.addOnPreDrawListener(new

ViewTreeObserver.OnPreDrawListener() {

   @Override

    public

booleanonPreDraw() {

       int

height =view.getMeasuredHeight();

       int

width =view.getMeasuredWidth();    

   }

});

方法三 :

?


1

2

3

4

5

6

7

8

9

10

//增加整体布局监听

ViewTreeObserver
vto = view.getViewTreeObserver(); 

vto.addOnGlobalLayoutListener(new

OnGlobalLayoutListener(){

    @Override

    public

voidonGlobalLayout() {

      view.getViewTreeObserver().removeGlobalOnLayoutListener(this);     

        int

height =view.getMeasuredHeight();

        int

width =view.getMeasuredWidth(); 

    

});

那么,在activity进入运行期时,组件的尺寸获取方法就很简单了,直接getWidth()和getHeight().

时间: 2024-10-01 22:40:59

Android 获得view的宽和高的相关文章

【转】Android 获得view的宽和高

转自:http://blog.csdn.net/yangdeli888/article/details/25405263 Android 获得view的宽和高 分类: android 技术点项目2014-05-09 16:15 6954人阅读 评论(3) 收藏 举报 在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实他们去得值是0,并不是你想要的结果? 这是为什么呢? 在调用oncreate()方法时,界面处于不

Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?

在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_view); myview = ViewUtils.find(this, R.id.myview); getViewSize("onCr

Android扩展-怎么在Activity中拿到一个View的宽和高

今天来简单的介绍一下怎么在Activity中拿到View的width和height.有人可能会疑问,这个有什么难的,我们直接可以在Activity生命周期函数里面获取width和height.看似简单,实际上在onCreate.onStart.onResume中均无法获取正确的width和height,这是因为View的measure过程和Activity的生命周期方法不是同步的,因此无法保证Activity执行了onCreate.onStart.onResume时,某个View已经测量完毕,如

android——获取view的宽高

在activity生命周期方法:onCreate(),onStart(),onResume()中调用View.getWidth()和View.getHeight()方法获取View的高度是不可行的,因为此时布局没有加载是不可见状态. 还有当view的可见状态为:GONE,时获取的宽高也是0: 2. 解决办法: (1)直接测量: private void first() { int width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSp

android中view的宽高测量

/// 一般的,view测量的方法: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ImageView imageView = (ImageView) findViewById(R.id.imageview); int w = View.MeasureSpec.makeMeasu

【转】获取Android控件的宽和高

我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看一下示例: 首先我们自己写一个控件,这个控件非常简单: public class MyImageView extends ImageView { public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); } public MyImageView(Context context) { super(context); }

Android初级教程_获取Android控件的宽和高

通过以下方法可以在onCreate中获取宽高 1 //------------------------------------------------方法一 2 int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 3 int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); 4 imageView.measure

在onCreate()中获取某个View的宽高

我们都知道,在Activity的onCreate()方法中调用View的getWidth()和getHeight()方法时,返回的值都是0,因为Activity调用setContentView方法只是创建了这个View,调用了这个View构造方法而已,其中的onMeasure()方法还没被调用,所以不能知道它的宽高.但是,View有一个公开的方法post(),允许我们通过参数Runnable,在子线程中获取View的宽和高. public class MainActivity extends A

Android 自定义 View 实现通讯录字母索引(仿微信通讯录)

一.效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等.这里我截了一张美团选择城市的图片来看看: 我们今天就来实现图片中右侧模块的索引功能,包括触摸显示以选中的索引字母.这里我的UI界面主要是参照微信的界面来实现,所以各位也可以对照微信来看看效果,什么都不说了,只有效果图最具有说服力! 二.分析: 我们看到这样的效果我们心理都回去琢磨,他是如何实现的: 首先,它肯定是通过自定义 View 来实现的,因为 Android 没有提供类似这样的控件