Splash Screen not properly displayed

时间:2016-03-02 11:01:19

标签: android splash-screen android-studio-2.0-beta5

Code For splash.xml :

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 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: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/notice2"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".SplashScreen">
</RelativeLayout>

Code For AndroidManifest.xml :

  <application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity

        android:name="com.kksworld.noticeboard.SplashScreen"
        android:label="@string/title_activity_splash_screen"

        android:theme="@style/AppTheme.NoActionBar">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.kksworld.noticeboard.LoginActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
    <activity
        android:name="com.kksworld.noticeboard.Registration"
        android:label="@string/title_activity_registration"
        android:theme="@style/AppTheme.NoActionBar" />

</application>

`I am trying to add splash screen in my project. But after running the app the screen stops for the time i have set the timer but exact splash screen is not coming. After that everything is coming. Please Help. Thanks.

enter image description here

Code for Splash Activity :

public class SplashScreen extends Activity {

    // Splash screen timer
    private static int SPLASH_TIME_OUT = 3000;

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

        new Handler().postDelayed(new Runnable() {

            /*
             * Showing splash screen with a timer. This will be useful when you
             * want to show case your app logo / company
             */

            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity
                Intent i = new Intent(SplashScreen.this, LoginActivity.class);
                startActivity(i);

                // close this activity
                finish();
            }
        }, SPLASH_TIME_OUT);
    }

}

3 个答案:

答案 0 :(得分:1)

尝试使用以下代码

<强>的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.androidsplashscreentimer"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- Splash screen -->
        <activity
            android:name="info.androidhive.androidsplashscreentimer.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="info.androidhive.androidsplashscreentimer.MainActivity"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest> 

<强> activity_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient_background" >

    <ImageView
        android:id="@+id/imgLogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@drawable/wwe_logo" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:textSize="12dp"
        android:textColor="#454545"
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true"
        android:text="www.androidhive.info" />

</RelativeLayout>

<强> SplashScreen.java

package info.androidhive.androidsplashscreentimer;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class SplashScreen extends Activity {

    // Splash screen timer
    private static int SPLASH_TIME_OUT = 3000;

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

        new Handler().postDelayed(new Runnable() {

            /*
             * Showing splash screen with a timer. This will be useful when you
             * want to show case your app logo / company
             */

            @Override
            public void run() {
                // This method will be executed once the timer is over
                // Start your app main activity
                Intent i = new Intent(SplashScreen.this, MainActivity.class);
                startActivity(i);

                // close this activity
                finish();
            }
        }, SPLASH_TIME_OUT);
    }

}

答案 1 :(得分:1)

延迟应用的启动屏幕不应该,因为它们会阻止用户使用您的应用做任何事情。

但是:有一种更好的方法,它更容易实现! 每个应用程序都需要一些时间来启动,并且在启动时,大多数应用程序仅显示白色背景,因为这是默认设置。您可以通过向themes.xml添加一个将windowBackground设置为任何可绘制

的新样式来更改它
<style name="YourApp.AppTheme.Splashscreen" parent="YourApplicationsTheme">
    <item name="android:windowBackground">@drawable/splashscreen</item>
</style>

如果您想在彩色背景上添加徽标,可以像这样定义可绘制的内容:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">
    <item android:drawable="@color/some_color"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/some_logo"/>
    </item>
</layer-list>

只需将此主题添加到<application>中的AndroidManifest.xml,您的启动画面就已启动并正常运行。

最后,在启动后使用

将主题设置回正常主题
getApplication().setTheme(R.style.YourApplicationsTheme);

以防止在切换活动时出现飞溅。

全部完成!美丽的闪屏,不会延迟用户。

Android设计指南也建议that way,您也可以参考this作为参考。

答案 2 :(得分:0)

检查布局文件。确保使用正确的布局文件。在java代码中,您使用了content_splash_screen.xml,但是,您已经发布了splash.xml的代码。

代码中没有错误,您的代码应运行正常。