为什么在 onResume() 中调用 View 的 getWidth() 会返回 0?

2024-04-02

我读过的所有内容都说你不能打电话getWidth() or getHeight() on a View在构造函数中,但我正在调用它们onResume()。那时屏幕的布局不是应该已经画好了吗?

@Override
protected void onResume() {
    super.onResume();

    populateData();
}

private void populateData() {
    LinearLayout test = (LinearLayout) findViewById(R.id.myview);
    double widthpx = test.getWidth();
}

视图仍未绘制时onResume()被调用,所以它的宽度和高度都是 0。当它的大小发生变化时,你可以使用OnGlobalLayoutListener() https://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {

        // Removing layout listener to avoid multiple calls
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
            yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
        else {
            yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }

        populateData();
    }
});

有关更多信息,请查看Android获取宽度返回0 https://stackoverflow.com/questions/3591784/android-get-width-returns-0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 onResume() 中调用 View 的 getWidth() 会返回 0? 的相关文章

随机推荐