如何以编程方式在android资源文件中设置项目windowBackground

Posted

技术标签:

【中文标题】如何以编程方式在android资源文件中设置项目windowBackground【英文标题】:How to set item windowBackground in android resource file programmatically 【发布时间】:2021-09-05 17:55:44 【问题描述】:

我正在处理启动应用程序时弹出的启动画面,但我不想在 Activity 中膨胀布局,而是想为其中包含图像资源的启动 Activity 设置一个主题。

androidManifest.xml

<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash</item>
    </style>
</resources>

我的问题是: 是否可以通过代码更改&lt;item name="android:windowBackground"&gt;@drawable/splash&lt;/item&gt;? 我从网络收到了应随机设置为初始屏幕的图像 url 列表,因此必须动态设置初始屏幕。 我设法找到了以下代码,但我只是不知道如何从那里开始。

val styleId = resources.getIdentifier("SplashTheme", "style", packageName)
val drawableFromPath = Drawable.createFromPath("some image url")

我应该只使用片段吗?

【问题讨论】:

如果您使用闪屏来显示从网络接收到的内容,那么您就错过了闪屏的实际用途 感谢 zedlabs 的反馈!是因为启动画面的目的是在获取数据的同时创建应用程序的初始布局吗?我应该找到更好的方式来呈现图像。 启动画面的目的是在应用加载初始数据时向用户显示一些东西(主要是静态矢量),您可以将图像加载为初始数据 【参考方案1】:

正如@zedlabs 所说,您的概念可能有误。通过设置以下属性,您看到的是

<item name="android:windowBackground">@drawable/splash</item>

您可以设置应用加载时看到的内容。通常它是一个白屏,但通过替换它,您会看到您设置的内容。也是所有应用默认的windowBackground

因此,如果您打算将其设置为动态,则它不会真正起作用,因为您需要加载应用程序需要加载的资源,并且在加载时此屏幕将不再可见。

您可以选择专门显示一段时间然后应用启动的自定义启动画面。

我建议检查一下:https://medium.com/android-news/the-complete-android-splash-screen-guide-c7db82bce565

【讨论】:

感谢您的反馈!我会检查链接

以上是关于如何以编程方式在android资源文件中设置项目windowBackground的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中,如何以编程方式在 dp 中设置边距?

如何以编程方式更改 Windows Phone 中设置器值中的图像

如何以编程方式在 dp 中设置 EditText 上边距?

Android:以编程方式在 FrameLayout 中设置边距 - 不起作用

以编程方式在 TextView 中设置左可绘制对象

如何在android APP中设置系统语言