如何将布局转换为可绘制以用于启动画面
How to convert layout to drawable for use in splash screen
背景资料
当用户进入我的 Android 应用程序时。他们首先被带到 LoginActivity
。 LoginActivity
需要一些时间来加载,因为它还负责执行后台 sqlite 迁移以及其他内务处理任务(这需要 500-1000 毫秒)。
不幸的是,用户在整个过程中看到的都是空白屏幕。由于setContentView
还没有执行。
我正尝试按照指南解决此问题
- https://android.jlelse.eu/launch-screen-in-android-the-right-way-aca7e8c31f52
- https://www.bignerdranch.com/blog/splash-screens-the-right-way/
他们告诉我我需要在可绘制对象中创建一个 background_splash.xml
并使用带有 <item name="android:windowBackground">@drawable/background_splash</item>
的自定义样式指向它
不幸的是,我注意到我无法在可绘制对象中控制 padding
margin
width
height
、gravity
我的徽标。
<?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.
执行此操作
背景资料
当用户进入我的 Android 应用程序时。他们首先被带到 LoginActivity
。 LoginActivity
需要一些时间来加载,因为它还负责执行后台 sqlite 迁移以及其他内务处理任务(这需要 500-1000 毫秒)。
不幸的是,用户在整个过程中看到的都是空白屏幕。由于setContentView
还没有执行。
我正尝试按照指南解决此问题
- https://android.jlelse.eu/launch-screen-in-android-the-right-way-aca7e8c31f52
- https://www.bignerdranch.com/blog/splash-screens-the-right-way/
他们告诉我我需要在可绘制对象中创建一个 background_splash.xml
并使用带有 <item name="android:windowBackground">@drawable/background_splash</item>
不幸的是,我注意到我无法在可绘制对象中控制 padding
margin
width
height
、gravity
我的徽标。
<?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.
执行此操作