飞溅前的空白屏幕

Som*_*Pal 27 android splash-screen

主要问题是2-3秒后出现闪屏.在启动屏幕之前,会出现我不想要的空白布局.否则运行正常.只想删除在启动页面之前出现的空白布局.

主要活动:

public class MainActivity extends Activity {

    private static String TAG = MainActivity.class.getName();
    private static long SLEEP_TIME = 5; // Sleep for some time

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  // Removes notification bar

        setContentView(R.layout.activity_main);

        // Start timer and launch main activity
        IntentLauncher launcher = new IntentLauncher();
        launcher.start();
    }

    private class IntentLauncher extends Thread {

        @Override
        /**
         * Sleep for some time and than start new activity.
         */
        public void run() {
            try {
                // Sleeping
                Thread.sleep(SLEEP_TIME*1000);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }

            // Start main activity
            Intent intent = new Intent(MainActivity.this, Login.class);
            MainActivity.this.startActivity(intent);
            MainActivity.this.finish();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

主要布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/splash"
    tools:context=".MainActivity" >

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Eoi*_*oin 25

一般来说,不建议在应用程序中使用闪屏,但如果你真的必须这样做.

Android将根据您为其设置的主题加载空白布局.解决方案是将泼水活动的主题变为透明的主题.

在中创建透明主题 res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="Theme.Transparent" parent="android:Theme">
      <item name="android:windowIsTranslucent">true</item>
      <item name="android:windowBackground">@android:color/transparent</item>
      <item name="android:windowContentOverlay">@null</item>
      <item name="android:windowNoTitle">true</item>
      <item name="android:windowIsFloating">true</item>
     <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后在清单中设置主题

<activity android:name=".SplashActivity" android:theme="@style/Theme.Transparent">
...
</activity>
Run Code Online (Sandbox Code Playgroud)

  • 此主题不适用于AppCompatActivity,并且不会删除状态栏。 (3认同)

Kei*_*ati 23

最好使用主题背景作为开始活动,但如果您不希望在启动主活动之前出现空白屏幕,您可以像这样定义您的活动:

在res/values/styles.xml中添加android:windowDisablePreviewAppTheme:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="AppTheme" parent="android:Theme">
        <item name="android:windowDisablePreview">true</item>
  </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后在清单中设置您的活动主题:

<activity android:name=".MainActivity" android:theme="@style/AppTheme">
...
</activity>
Run Code Online (Sandbox Code Playgroud)

PS:设置android:windowDisablePreview对您的活动背景没有影响,因此您无需担心.

  • 禁用预览救了我。谢谢 (2认同)
  • android:windowDisablePreview 正是我所需要的。谢谢你! (2认同)

小智 6

你在这里面临的问题被称为"冷启动",这是你的Application.onCreate方法花费的时间,通常会做一些初始化,可能需要比你想要的更长的时间.您可以在这里阅读官方文档:https://developer.android.com/topic/performance/launch-time.html

如果是这种情况,则将主题设置为半透明或禁用预览,因为其他人建议只显示解决问题,因为实际上您将尝试启动应用程序,您将不会收到有关您点击应用程序的事实的任何反馈图标.您将看到您的应用程序以延迟开始,这不是一个理想的用户体验.

空白,黑色或白色屏幕,它实际上取决于android:windowBackground主活动主题中指定的属性.除了移动您可能在您的Application.onCreate方法中执行的一些初始化之外,您可以做的最好的事情是使用本文中建议的徽标标记预览窗口:

https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

如果是这种情况,您可以通过在初始屏幕中设置徽标图像的动画来进一步改善用户体验,或者以可以平滑过渡到主要活动内容的方式设计预览窗口,如下所述:

http://saulmm.github.io/avoding-android-cold-starts

同样的问题在这里得到了正确回答:https://stackoverflow.com/a/40482549/7094200并在此博客文章中描述:https://www.bignerdranch.com/blog/splash-screens-the-right-way/


COR*_*ian 6

支持 AppCompatActivity

res/values/styles.xml

<style name="SplashTheme" parent="AppTheme">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowDisablePreview">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

GL

来源


Nar*_*ngh 5

只需在AndroidManifest.xml文件中提及启动活动的透明主题即可.

      <activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
         <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
Run Code Online (Sandbox Code Playgroud)


Job*_*ive 5

真!下面的链接为我工作!!

https://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/

为您的启动屏幕在style.xml中编写单独的样式,以便您可以同时关联两个屏幕。

这里的风格:

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/splash_final</item>
    </style>
Run Code Online (Sandbox Code Playgroud)