它们之间有什么区别?据我所见,他们俩都做同样的事情。

最佳答案

如果您访问源代码,则会发现具有Window.setBackgroundDrawable方法的实现的PhoneWindow.class

@Override
public final void setBackgroundDrawable(Drawable drawable) {
    if (drawable != mBackgroundDrawable || mBackgroundResource != 0) {
        mBackgroundResource = 0;
        mBackgroundDrawable = drawable;
        if (mDecor != null) {
            mDecor.setWindowBackground(drawable);
        }
        if (mBackgroundFallbackResource != 0) {
            mDecor.setBackgroundFallback(drawable != null ? 0 : mBackgroundFallbackResource);
        }
    }
}


如您所见,它调用DecorView setWindowBackground的不同方法:

public void setWindowBackground(Drawable drawable) {
    if (getBackground() != drawable) {
        setBackgroundDrawable(drawable);
        if (drawable != null) {
            drawable.getPadding(mBackgroundPadding);
        } else {
            mBackgroundPadding.setEmpty();
        }
        drawableChanged();
    }
}


这实际上是使用方法DecorView.setBackgroundDrawable,但也为Window提供了其他逻辑。因此,我建议您使用getWindow().setBackgroundDrawable()

10-06 09:25