【问题标题】:Splash screen not opening first启动画面未先打开
【发布时间】:2017-03-10 13:00:06
【问题描述】:

它不是先打开启动画面,而是先打开主 Activity,然后再打开启动画面。可能是什么问题。在我按下返回按钮之前,启动画面不会消失。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.os.Handler;

public class MainActivity extends AppCompatActivity {
  private static int SPLASH_TIME_OUT=4000;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  new Handler().postDelayed(new Runnable(){
     public void run(){
     Intent homeIntent=new Intent(MainActivity.this,Splash.class);
     startActivity(homeIntent);
     finish();
     }
        }, SPLASH_TIME_OUT);
   }
}

【问题讨论】:

  • 将您的 Splash Activity 作为 Launcher Activity 添加到您的 android Manifest 文件中。
  • 将启动器活动设为清单文件中的默认启动器活动。
  • 您正试图从 MainActivity 打开 Splash。您需要在 AndroidManifest 上将 Splash 定义为 Launcher 活动。
  • 它的行为与您编写的代码完全一样。只有在主要活动启动后才会在您的代码启动中启动。

标签: android splash-screen


【解决方案1】:

制作启动画面的最佳方式

你需要什么:

  • 两个ActivityMainActivity.javaSplashScreen.java
  • 两种布局:layout_main_activity.xmllayout_splashscreen.xml

在您的 AndroidManifest.xml 中,声明两个 Activity。 SplashScreen 必须是主体 ActivityMAINLAUNCHER):

        <!-- Splash screen -->
        <activity
            android:name="com.package.SplashScreen"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Main activity -->
        <activity
            android:name="com.package.MainActivity"
            android:label="@string/app_name" >
        </activity>

SplashScreen.java:

public class SplashScreen extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent i = new Intent(SplashScreen.this, MainActivity.class);
                startActivity(i);
                finish();
            }
        }, 3000); // for 3 seconds
    }

}

【讨论】:

  • 这很有帮助
  • 很高兴能提供帮助:)
【解决方案2】:

在 AndroidManifest.xml 中,

<activity
    android:name=".SplashActivity"
    android:noHistory="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".MainActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" />

并且在splashscreen.java的onCreate函数中,可以设置一个定时器来调用mainactivity

new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                startActivity(new Intent(getApplicationContext(), MainActivity.class));
            }
        },4000);

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2013-04-17
    相关资源
    最近更新 更多