4种Android获取View宽高的方式_Android

有时我们会有基于这样的需求,当Activity创建时,需要获取某个View的宽高,然后进行相应的操作,但是我们在onCreate,onStart中获取View的大小,获取到的值都是0,只是由于View的绘制工程还未完成,和在onCreate中弹出Dialog或者PopupWindow会报一个Activity not running原理类似。

接下来就为大家介绍几种获取View宽高的方法:
第一种方式:重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow也可以在这里弹出,需要注意的是这个方法会调用多次,当hasFocus为true时,才可进行相应的操作

@Override
  public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
      System.out.println("onWindowFocusChanged width="
          + tvTest.getWidth() + " height=" + tvTest.getHeight());
    }
  }

第二种方式:

/**
   * 会执行多次
   */
  private void getSize1() {

    ViewTreeObserver vto = tvTest.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
      @Override
      public boolean onPreDraw() {
        int height = tvTest.getMeasuredHeight();
        int width = tvTest.getMeasuredWidth();
        System.out.println("height" + height);
        System.out.println("width" + width);
        return true;
      }

    });
  }

第三种方式:

private void getSize2() {
    ViewTreeObserver viewTreeObserver = tvTest.getViewTreeObserver();
    viewTreeObserver
        .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
          @Override
          public void onGlobalLayout() {
            tvTest.getViewTreeObserver()
                .removeGlobalOnLayoutListener(this);
            System.out.println("onGlobalLayout width="
                + tvTest.getWidth() + " height="
                + tvTest.getHeight());
          }
        });
  }

第四种方式:

private void getSize3() {
    tvTest.post(new Runnable() {

      @Override
      public void run() {
        System.out.println("postDelayed width=" + tvTest.getWidth()
            + " height=" + tvTest.getHeight());
      }
    });

  }

以上就是Android获取View宽高的4种方式,希望对大家的学习有所帮助。

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

时间: 2024-12-23 14:30:23

4种Android获取View宽高的方式_Android的相关文章

Android 获得View宽高的几种方式总结

<Android开发艺术探索>笔记: 在Activity的onCreate()或者onResume()中去获得View的高度的时候不能正确获得宽度和高度信息,这是因为 View的measure过程和Activity的生命周期不是同步执行的,因此无法保证Activity执行了onCreate onStart onResume时,某个View已经测量完毕了,如果还没有测量完,那么获得的宽高就是0.可以通过下面几种方式来获得: 1.onWindowFocusChanged onWindowFocus

android获取屏幕宽高与获取控件宽高(三种方法)

1.获取屏幕宽高 方法1: int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px) int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p) Log.e(TAG + " getDefaultDisplay", "screenWidth=&q

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

Android编程获取屏幕宽高与获取控件宽高的方法_Android

本文实例讲述了Android编程获取屏幕宽高与获取控件宽高的方法.分享给大家供大家参考,具体如下: 获取屏幕宽高 // 获取屏幕宽高(方法1) int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px) int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p) L

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

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

Android获取view高度的三种方式

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

Android 获取View宽度

/***************************************************************************** * Android 获取View宽度 * 说明: * 在View默认的构造函数里无法获取到View的宽高,需要采用另外的方式获取. * * 2016-6-15 深圳 南山平山村 曽剑锋 ****************************************************************************/

javascript获取图片宽高的例子总结

  一.简陋的获取图片方式  代码如下   // 图片地址 后面加时间戳是为了避免缓存     var img_url = '/static/upload/2013/13643608813441.jpg?'+Date.parse(new Date());    // 创建对象     var img = new Image();     // 改变图片的src     img.src = img_url;     // 打印     alert('width:'+img.width+',heig

js获取图片宽高的方法_javascript技巧

本文分享多种js获取图片宽高的方法,并且通过实例进行分析,希望大家从中有所收获. 一.简陋的获取图片方式 // 图片地址 后面加时间戳是为了避免缓存 var img_url = 'upload/2013/13643608813441.jpg?'+Date.parse(new Date()); // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 打印 alert('width:'+img.width+',height:'