如何删除闪屏前出现的白屏?

时间:2016-12-01 07:56:06

标签: android performance android-layout splash-screen

在打开java文件的时候我先看看空白的白色屏幕,然后看起来我的启动画面布局。我有java文件:

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    //Task 
                    finish();
                }
              }, ARG_SPLASH_TIME);

xml文件中,我只需添加ImageView并设置android:src值。 在manifest文件中,我在Launcher模式下打开Splash活动。

6 个答案:

答案 0 :(得分:6)

最后得到了我的答案 Splash Screen in Right Way 。我只是跟随。

在values-> styles.xml中,我创建了启动画面背景图像

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>
</style>

对于下面的api 19,在值-19-&gt; styles.xml中使用了

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

我从SplashActivity中删除了setContentview(),并在Manifest.xml文件android:theme="@style/AppTheme.Splash"

中为启动画面添加了样式

答案 1 :(得分:2)

使用:

<item name="android:windowDisablePreview">true</item>

在您的应用主题的style.xml文件中。

答案 2 :(得分:2)

这是新发布的Android Studio的一个奇怪问题。第一次启动应用程序需要比平时更长的时间(看起来是白色的)。此问题仅在调试模式下发生,不会对您发布的APK产生影响。我也遇到了这个问题并找到了解决方案。

设置/首选项→构建,执行,部署→即时运行并取消选中即时运行

Instant run in Android Studio 2.0 (how to turn off)

答案 3 :(得分:2)

您可以在启动活动中使用此样式 -

<style name="YourTheme">
  <item name="android:windowBackground">@null</item>
</style>

答案 4 :(得分:2)

白屏是一种让Android系统感觉对用户更敏感的方式。用户点击应用程序并立即看到结果(应用程序)。

那么我们如何才能改变这种行为?

我们可以禁用此预览,如@Piyush所写:

<item name="android:windowDisablePreview">true</item>

Hovewer这会让你的应用程序变得迟钝,我的意思是,你暂时不会看到任何东西然后你会看到你的活动,而不是你期望发生的结果。

更好的选择是在你的风格中使用活动。

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

这将更改应用程序的默认背景,您可以为应用程序添加预加载器图像,例如使用您的徽标。

两种情况下的用户都必须等待,但感觉更敏感

答案 5 :(得分:0)

一些答案​​现在无法正常工作,因此我对此进行了更新,并确保它可以正常运行。首先创建您的xml启动文件

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

    <item
        android:width="@dimen/_145sdp"
        android:height="@dimen/_30sdp"
        android:drawable="@drawable/your_logo_here"
        android:gravity="center" />
</layer-list>

在您的清单中:

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

并延续您的风格:

<style name="Theme.Splash" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen</item>
<!--        <item name="android:windowNoTitle">true</item>-->
<!--        <item name="android:windowActionBar">false</item>-->
<!--        <item name="android:windowFullscreen">true</item>-->
<!--        <item name="android:windowContentOverlay">@null</item>-->
    </style>

您不需要布局文件,也没有必要,像这样删除类中的setContentView:

class SplashActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setUpView()
    }


    private fun setUpView() {
        Handler(Looper.getMainLooper()).postDelayed({
            val intent = Intent(this, MainActivity::class.java)
            //startActivity(intent)
            // finishAffinity()
        }, 2000)

    }
}