无法弄清楚如何获得视图/布局宽度/高度

时间:2010-08-27 06:11:27

标签: android

我是Android新手。这应该是世界上最简单的事情,但弄清楚它会让我感到沮丧:如何获得视图或布局的尺寸?

标准方法似乎有以下几点:

((的LinearLayout)this.findViewById(R.id.MyLayout))的getWidth();

除此之外总是返回零,因为我在Activity启动时尝试执行此操作(onCreate)并且尚未设置几何。我尝试进入睡眠状态,让它有机会设置布局,除非不会设置布局,直到onCreate返回。所以它显然没有线程化。 :P

我发现了一堆谈论覆盖各种不同的回调函数,以确保当你打电话的getWidth布局加载页面 - 但是当我试图把覆盖在我的活动他们都扔错误。所以我可以假设它们是被测量的布局和/或视图的回调。问题在于我没有使用自定义视图/布局类 - 只是标准类。所以我不能只是添加一个覆盖,据我所知。

任何人都知道我应该做什么?我已经花了8个小时来解决这个问题并且无处可去。在大多数开发环境中,这通常是一件非常简单的事情!

5 个答案:

答案 0 :(得分:21)

final View view = .....; // your view

view.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {

      @Override
      public void onGlobalLayout() {
        // make sure it is not called anymore 
        view.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        // your code to get dimensions of the view here:
        // ...
      }
    });

答案 1 :(得分:1)

为什么不View.getLayoutParams()?它有public int heightpublic int width

答案 2 :(得分:1)

迟了两年,但是把它放在别人身上。 尝试覆盖onWindowFocusChanged。您应该能够在那里获得视图的测量宽度/高度。

答案 3 :(得分:0)

onStart()期间怎么做?在onCreate()完成执行后调用此方法,这意味着布局已经膨胀。 android lifecycle

答案 4 :(得分:-1)

我有一个解决方法:

view.postDelayed(new MyRunnable(), 500); 

从现在起500毫秒内运行MyRunnable中的逻辑。这允许onCreate或任何生命周期方法返回和绘制,以便我可以获得正确的高度和宽度。但它也很难看,因为用户可以看到延迟。