getWindow().setBackgroundDrawable 和 getWindow().getDecorView().setBackgroundDrawable 之间的区别
Difference between getWindow().setBackgroundDrawable and getWindow().getDecorView().setBackgroundDrawable
它们有什么区别?据我所知,他们都做同样的事情。
如果您查看资源,您会发现 PhoneWindow.class 实现了 Window.setBackgroundDrawable
方法:
@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()
.
它们有什么区别?据我所知,他们都做同样的事情。
如果您查看资源,您会发现 PhoneWindow.class 实现了 Window.setBackgroundDrawable
方法:
@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()
.