ImageView.getWidth() 返回 0

我得到图像视图的宽度为0。下面是代码。

xml 文件 :

<ImageView
        android:id="@+id/img"
        android:layout_width="200dp"
        android:layout_height="200dp" />

活动:

@Override
protected void onResume() {
    super.onResume();
    ImageView img = (ImageView) findViewById(R.id.img);
    Log.d(TAG, "width : " + img.getWidth());
}

我不想使用下面的代码,因为我需要将此代码放在很多地方。

ViewTreeObserver vto = img.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
            ImageView img = (ImageView) findViewById(R.id.img);
                    Log.d(TAG, "width : " + img.getWidth());
            return true;
        }
    });

我的解决方法:实际上,我后来不需要在活动中添加此代码。我将其添加到非活动类中,而不是ImageView的宽度,我使用了位图图像的宽度,现在没有这个问题。


答案 1

您在哪里打电话和在ImageView上?如果从活动中呼叫,则无法正常工作。您需要等待活动窗口附加,然后调用 ImageView。您可以尝试从活动方法调用。getWidth()getHeight()onCreate()getWidth() and getHeight()getWidth() and getHeight()onWindowFocusChanged()

调用 onWindowFocus 像这样改变

public void onWindowFocusChanged(boolean hasFocus) {
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);
     if (hasFocus) {
        ImageView img = (ImageView) findViewById(R.id.img);
        Log.d(TAG, "width : " + img.getWidth());
     }

    }

答案 2

既然你已经有了一个200dp的“固定”宽度图像视图,为什么不把它放在dimens中呢.xml

<dimen name="image_width">200dp</dimen>

然后简单地

int width = (int) getResources().getDimension(R.dimen.image_Width)

推荐