如何将布局转换为可绘制以用于启动画面

How to convert layout to drawable for use in splash screen

背景资料

当用户进入我的 Android 应用程序时。他们首先被带到 LoginActivityLoginActivity 需要一些时间来加载,因为它还负责执行后台 sqlite 迁移以及其他内务处理任务(这需要 500-1000 毫秒)。

不幸的是,用户在整个过程中看到的都是空白屏幕。由于setContentView还没有执行。

我正尝试按照指南解决此问题

他们告诉我我需要在可绘制对象中创建一个 background_splash.xml 并使用带有 <item name="android:windowBackground">@drawable/background_splash</item>

的自定义样式指向它

不幸的是,我注意到我无法在可绘制对象中控制 padding margin width heightgravity 我的徽标。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

        <!-- cant control android:margin=... (my min API is 21) -->
        <!-- cant control android:width=...  (my min API is 21) -->
        <!-- cant control android:height=... (my min API is 21) -->
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

我的问题

如何正确实现与当前 activity_login.xml 文件相同(或至少相似)的行为并将其转换为可绘制对象?

我的代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/material_red_500">

    <!--***********************************************************
    * Layout section: The login logo
    ************************************************************-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <android.support.v7.widget.AppCompatImageView
            android:layout_centerInParent="true"

            android:src="@drawable/image_symbol_lock"
            android:scaleType="fitCenter"

            android:layout_width="150dp"
            android:layout_height="150dp"/>

    </RelativeLayout>

    <!--***********************************************************
    * Layout section: The login button (facebook)
    ************************************************************-->
    <android.support.v7.widget.AppCompatTextView
        android:id="@+id/button_facebook"

        android:paddingTop="28dp"
        android:paddingStart="16dp"
        android:paddingEnd="16dp"
        android:paddingBottom="28dp"
        android:background="@color/material_blue_500"

        android:text="LOG IN"
        android:textSize="32sp"
        android:textColor="@color/white"

        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</android.support.v7.widget.LinearLayoutCompat>

您可以使用自己的设计创建一个 layout_splash,并且在 Splash 样式中只设置背景颜色。所以首先你会看到背景颜色而不是空白,然后是布局。您可以使用登录名 activity.

执行此操作