启动画面期间加载MainActivity

时间:2017-06-07 21:03:32

标签: android splash-screen

我目前有一个splashScreenActivity,要求用户按button转到MainActivity

是否可以加载MainActivity 的所有内容,而不会MainActivitysplashScreenActivity的用户界面上显示的用户界面这样当他按下按钮时,他被重定向到MainActivity并且所有数据都是100%加载的?

提前致谢

3 个答案:

答案 0 :(得分:4)

在主要活动上使用带有Runnable的全屏对话框

public void showsplash() {

        final Dialog dialog = new Dialog(MainActivity.this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.activity_splash_screen);
        dialog.setCancelable(true);
        dialog.show();

        final Handler handler  = new Handler();
        final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                {
                    dialog.dismiss();
                }
            }
        };
        handler.postDelayed(runnable, 30000);
    }

答案 1 :(得分:2)

我找到了问题的答案!

请注意,在我的情况下,MainActivity可以是任何活动

将启动画面设为fragment而不是activity,您可以使用MainActivity覆盖fragment,同时加载MainActivity数据的背景。

此时,只要您准备好,只需将fragment的可见性设置为View.GONE或将其从片段堆栈getFragmentManager().popBackStack();中弹出,您将返回(从未真正离开) )加载所有数据的MainActivity

答案 2 :(得分:0)

    1) Use AsyncTask<> to load all your MainActivity contents in the background while the user is in the SplashScreenActivity. This will help you avoid the extra step of clicking on a button to take you from the SplashScreenActivity to the MainActivity, and this will be handled through the use of Intents. (Refer to working example below)

    ------------------------------------------------------------------
    SplashScreenActivity.java
    ------------------------------------------------------------------
        package foo.foo.load.mainactivity

        import android.app.Activity;
        import android.content.Context;
        import android.content.Intent;
        import android.content.pm.ActivityInfo;
        import android.content.res.AssetManager;
        import android.content.res.Configuration;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.util.Log;
        import java.util.ArrayList;
        import java.util.List;

        public class SplashScreenActivity extends Activity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_splash);      

                // Make call to execute AsycTasks<> here
                // This helps avoid the extra step of clicking on a button
                // to take you to the MainActivity
                new StartMainActivity().execute(this);

                Thread timerThread = new Thread() {
                    public void run() {
                        try {
                            sleep(2000);
                        } catch(InterruptedException e) {
                            e.printStackTrace();
                        } finally {
                            // After 2 seconds the Splashscreen will disappear and user is taken to MainActivity
                            Intent splashScreenIntent = new Intent(SplashScreenActivity.this, MainActivity.class);
                            startActivity(splashScreenIntent);
                        }
                    }
                };

                timerThread.start();
            }

            @Override
            protected void onPause() {
                super.onPause();
                finish();
            }

            private class StartMainActivity extends AsyncTask<Context, Void, Intent> {

                Context ctx;

                @Override
                protected Intent doInBackground(Context... params) {
                    ctx = params[0];
                    AssetManager assetManager = ctx.getAssets();
                    final CBLite cblite = new CBLite(new AndroidContext(ctx), assetManager);

                    // Handle all your MainActivity Contents call here 
                    // Begin MainActivity Content Calls            
                    Image.getImages();
                    Navigation.getMainNavigation();
                    // End MainActivity Content Calls

                    Intent in = new Intent();
                    in.setClass(ctx, MainActivity.class);

                    return in;
                }

                @Override
                protected void onPostExecute(Intent intent) {
                    ctx.startActivity(intent);
                    super.onPostExecute(intent);
                }

            }
        }

    ----------------------------------------------------------------
    activity_splash.xml
    ----------------------------------------------------------------

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

        <TextView
            android:id="@+id/splashScreenMainTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="150dp"
            android:gravity="center"
            android:text="Header Title"
            android:visibility="visible"/>

        <TextView
            android:id="@+id/splashScreenSubTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/splashScreenMainTitle"
            android:layout_marginBottom="40dp"
            android:gravity="center"
            android:text="Sub Header Title"
            android:visibility="visible"/>

        <ImageView
            android:id="@+id/splashScreenLogo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/splashScreenSubTitle"
            android:src="@drawable/logo"
            android:layout_gravity="center_horizontal"
            android:background="@android:color/transparent"/>

    </RelativeLayout>

-----------------------------------------------------------------
activity_main.xml
-----------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_menu_search" />

</android.support.design.widget.CoordinatorLayout>