android开发:DecorView无布局文件情况下设置背景

Android开发:前提条件:一个activity,但是没有布局文件,也就时没有对应的xml
然后我想设置这个activity的背景图片,在activity中:
public class MainActivity3 extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().getDecorView().setBackgroundResource(R.drawable.app_logo);
}

}

因为没有xml文件,所以没使用setContentView方法,网上说这个不行,DecorView不会展示出背景图的,因为DecorView是用来展示View,没有执行setContentView就没有向DecorView中添加View,所以不会展示,但是实际结果确实可以显示这个背景图。有人可以帮我看看这是什么问题吗,万分感谢

Activity会准备一个PhoneWindow,里面有个用来展示内容的DecorView,你可以通过setContentView将你的布局文件放到它的子View中进行展示;同时DecorView本身也是个View,自然也可以给它设置背景。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    这是因为getWindow().getDecorView()方法返回的是当前Activity的根布局,即DecorView。即使你没有使用setContentView方法来设置布局文件,Activity仍然会有一个默认的DecorView作为根布局。

    在这种情况下,你可以通过getWindow().setBackgroundDrawableResource()方法来设置背景图片,也可以通过设置Activity的主题样式来实现。

    解决方案一:使用getWindow().setBackgroundDrawableResource()方法来设置背景图片

    public class MainActivity3 extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().setBackgroundDrawableResource(R.drawable.app_logo);
        }
    }
    

    解决方案二:通过设置Activity的主题样式来设置背景图片

    首先,在res/values/styles.xml文件中定义一个新的主题样式,例如:

    <style name="AppThemeWithBackground" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/app_logo</item>
    </style>
    

    然后,在AndroidManifest.xml文件中将该主题样式应用到对应的Activity上,例如:

    <activity
        android:name=".MainActivity3"
        android:theme="@style/AppThemeWithBackground" />
    

    注意: 如果你的Activity已经指定了主题样式,需要根据实际情况修改该主题样式的父样式。

    以上是两种可以在没有布局文件的情况下设置Android应用的背景图片的解决方案。希望对你有帮助!如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^