【问题标题】:White screen at app startup - Splash Screen [duplicate]应用程序启动时出现白屏 - 启动画面 [重复]
【发布时间】:2018-02-28 02:36:32
【问题描述】:

我使用 empty Activity 为我的应用程序创建了一个启动画面,该 Activity 使用背景图像保持 可见 3 秒。 通常,应用程序在背景图像变得可见之前以白屏启动,但是,一些应用程序已经以“真实”启动屏幕图像启动。 如何实现这个?

【问题讨论】:

  • 删除您的启动画面,它们会导致大量问题并且对您的用户几乎没有价值。
  • 你在哪里设置背景图片?
  • JakeWilson801 那么我应该通过登录屏幕启动应用程序,还是如果用户已经登录,我应该从限制区域启动?
  • JakeWilson801 但如果我没有登录屏幕?是不是需要闪屏?
  • HassanUsman 我在相对布局中使用了 android:background=" "

标签: android android-studio splash-screen


【解决方案1】:

您可以通过这种方式使用启动画面。

  1. 在styles.xml 中为闪屏活动添加样式

    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/yourImageName</item>
    </style>
    
  2. 将该样式作为主题添加到清单文件中的 SplashScreenActivity

    <activity android:name=".SplashScreenActivity"
        android:theme="@style/SplashTheme"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
  3. 去掉SplashScreenActivity的onCreate()方法中的setContentView(),作为扩展AppCompactActivity的java文件使用

【讨论】:

    【解决方案2】:

    问题是因为系统进程在启动应用程序时绘制初始空白屏幕,来自documentation

    实现主题启动屏幕的常用方法是使用 windowDisablePreview 主题属性来关闭初始空白 启动应用程序时系统进程绘制的屏幕。然而, 这种方法可能会导致比不这样做的应用程序更长的启动时间 抑制预览窗口。此外,它迫使用户等待没有 活动启动时的反馈,让他们想知道应用程序是否 正常运行。

    您可以使用windowDisablePreview 属性禁用它,如下所示:

      <application
          ...
          android:windowDisablePreview="true">
       ...
      </application>
    

    【讨论】:

      【解决方案3】:

      Splash Activity 通常从背景开始。 试试这个代码,它可能对你有帮助。

      您的启动活动页面的代码。

      public class SplashScreen extends AppCompatActivity {
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_splash_screen);
      
      Thread myThread = new Thread(){
      
          @Override
          public void run() {
              try {
                  sleep(3000);
                  Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                  startActivity(intent);
                  finish();
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      };
          myThread.start();
      }}
      

      在布局文件中,您只需要包含您想在启动页面上看到的图像。

       <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/activity_splash_screen"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#000000">
         <ImageView
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:src="@drawable/capture"
             />
      </RelativeLayout>
      

      并确保在 Manifest 中的 Main Activity 之前添加 Splashscreen 页面。

       <activity android:name=".SplashScreen">
      

      【讨论】: