Java getWidth()和getHeight()返回0值

Java getWidth()和getHeight()返回0值,java,android,Java,Android,您好,我已经在android中创建了我的个人视图,当我想要获取其维度时,我总是得到0值,我发现我应该在代码中延迟此操作,我有一个问题,我可以这样做吗?我得到了好的尺寸 Personalview myView = (Personalview)findViewById(R.id.myView); myView.postDelayed(new Runnable() { @Override public void run() { Log.i("WIDTH",String.

您好,我已经在android中创建了我的个人视图,当我想要获取其维度时,我总是得到0值,我发现我应该在代码中延迟此操作,我有一个问题,我可以这样做吗?我得到了好的尺寸

Personalview myView = (Personalview)findViewById(R.id.myView);
myView.postDelayed(new Runnable() {
    @Override
    public void run() {
        Log.i("WIDTH",String.valueOf(myView .getHeight()));
        Log.i("HEIGHT",String.valueOf(myView .height()));
    }
},1000);

使用
OnLayoutChangeListener

myView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                myView.removeOnLayoutChangeListener(this);

                // get dimensions now
            }
        });

这是一种比设置任意延迟更好的方法。当
视图
的边界因布局处理而更改时,您将得到一个回调。因此,您将在
onLayoutChange
回调中获得正确的维度。不要忘了在第一次回调后删除侦听器。

很难从这么短的片段中想象。“蛇”的缩写是什么,在哪里。代码太短可能重复的可能重复的不删除第一次调用时的侦听器。这并不是每次都能得到维度。有时,第一次调用onLayoutChange时将使用0/0维度,但第二次调用时使用维度。当测量的高度/宽度>0时,删除侦听器。