android - getWidth() 和 getHeight 在 onMeasure() 之后返回零(特定设备)

标签 android surfaceview viewlayout

我注意到在调用 onMeasure() 之后,我的应用程序 View 为 getWidth() 和 getHeight() 返回 0。这只发生在少数设备上,对于大多数 android 设备,以下代码可以正常工作。我的 checkViewAndLoad() 函数根据 View 的大小加载缩放位图。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    Log.d("widthMeasureSpec", Integer.toString(MeasureSpec.getSize(widthMeasureSpec)));
    Log.d("heightMeasureSpec", Integer.toString(MeasureSpec.getSize(heightMeasureSpec)));
    Log.d("viewWidth", Integer.toString(getWidth()));
    Log.d("viewHeight", Integer.toString(getHeight()));

    checkViewAndLoad();
}

这是一个设备(摩托罗拉 Droid Razr Maxx)的日志,它在 onMeasure() 之后为 getWidth()/getHeight() 返回零:

09-03 20:55:58.359: D/widthMeasureSpec(29496): 540
09-03 20:55:58.359: D/heightMeasureSpec(29496): 720
09-03 20:55:58.359: D/viewWidth(29496): 0
09-03 20:55:58.359: D/viewHeight(29496): 0

我还尝试手动设置 MeasuredDimensions(),但那只手对日志没有影响。

谁能告诉我这里做错了什么,或者如何在调用 onMeasure() 后获取 SurfaceView 的宽度/高度?

最佳答案

在这里使用 getMeasuredWidth/Height()getWidth/Height() 在布局之后才有效。

关于android - getWidth() 和 getHeight 在 onMeasure() 之后返回零(特定设备),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18605187/

相关文章:

Android - 在 SurfaceView 上绘制简单的正弦波

android - 在 SurfaceView 上刷新 View 时出错

android - 如何使用android.view.SurfaceView

android - Android advertisingId 是每个设备还是每个用户帐户唯一的?

android - CMake FindThreads.cmake 找不到我的 pthreads.h header

java - (Android+Retrofit 2) - 将静态 header 与拦截器一起使用是否有缺点?

java - 如何使用共享首选项来更改语言