欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

4种Android获取View宽高的方式

程序员文章站 2023-12-18 19:42:52
有时我们会有基于这样的需求,当activity创建时,需要获取某个view的宽高,然后进行相应的操作,但是我们在oncreate,onstart中获取view的大小,获取到...

有时我们会有基于这样的需求,当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种方式,希望对大家的学习有所帮助。

上一篇:

下一篇: