Android启动画面未在真实设备上显示

时间:2016-06-18 12:50:16

标签: android android-studio splash-screen

我在我的galaxy s5和s6上尝试我的应用程序但是在这个设备上我的应用程序没有显示启动画面(来自ImageView的背景)(应用程序显示白屏并转到主屏幕)。我尝试在android工作室上的虚拟设备,它解决了问题。任何人都可以知道为什么会发生这种情况,我该如何解决?

我的SplashScreen类 -

    protected void onCreate(Bundle savedInstanceState) {

    //    hide action bar from the activity
    android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    actionBar.hide();

    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash_screen);

    /****** Create Thread that will sleep for 6 seconds *************/
    Thread background = new Thread() {
        public void run() {

            try {
                // Thread will sleep for 6 seconds
                sleep(6 * 1000);

                // After 5 seconds redirect to another intent
                Intent i = new Intent(getBaseContext(), MainActivity.class);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                startActivity(i);

                //Remove activity
                finish();

            } catch (Exception e) {

            }
        }
    };

    // start thread
    background.start();
}

谢谢!

3 个答案:

答案 0 :(得分:0)

protected void onCreate(Bundle savedInstanceState) {



super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);

getSupportActionBar().hide();


/****** Create Thread that will sleep for 6 seconds *************/
Thread background = new Thread() {
    public void run() {

        try {
            // Thread will sleep for 6 seconds
            sleep(6 * 1000);

            // After 5 seconds redirect to another intent
            Intent i = new Intent(getBaseContext(), MainActivity.class);

            startActivity(i);
           overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

            //Remove activity
            finish();

        } catch (Exception e) {

        }
    }
};

// start thread
background.start();
 }

试试这个:)

在setContentView

之后隐藏操作栏

答案 1 :(得分:0)

根据您的目的,您有2个选项。

选项1

您只想显示启动画面并继续前进。在后台没有发生大量数据加载/准备工作。

在这种情况下,制作一个SplashActivity,它将您的图像作为背景或在ImageView中。 SplashActivity onCreate()内部执行此操作:

Handler handler = new Handler();
handler.postDelayed(new Runnable(){
     startActivity(SplashActivity.this, MainActivity.class);
}, SPLASH_TIMEOUT);

其中SPLASH_TIMEOUT是您想要显示启动画面的时间(以毫秒为单位)。

选项2

在后台加载数据时显示启动画面。

在这种情况下,将ImageView放在视图层次结构的顶部,并使其宽度和高度match_parent。给它一些id来从代码中引用。

完成加载/获取数据后,您可能会收到一些回调信息,告知您已完成所有操作,并且只是在回调中执行

splashImage.setVisibility(View.GONE);

就是这样!

答案 2 :(得分:0)

这里是Launch Screens的google ui模式,问题是你是以错误的方式实现它,使用延迟,用户不应该等待启动&的时间。 #34;应用" +延迟,我之前也犯了这个错误,在你的启动活动中显示布局文件之前,你看到的启动视图必须立即就绪,所以这是实现它的正确方法:

1 - 在Res / Drawable上创建一个xml,它将是你的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:drawable="@color/common_signin_btn_dark_text_default"/>
<item>
    <bitmap
        android:gravity="center"
        android:src="@mipmap/ic_launcher"/>
</item>

</layer-list>

2 - 导航到Res / Values并编辑styles.xml,添加你的布局。

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splashscreen</item>
</style>

3 - 在AndroidManifest.xml文件中,将SplashScreen Activity设置为使用创建的主题。

<activity
      android:name=".SplashScreen"
      android:theme="@style/SplashTheme">
      <intent-filter>
         <action android:name="android.intent.action.MAIN" />

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

4 - 最后在您的SplashScreen活动中,将其转发到您的主要活动。

public class SplashScreen extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
} // SplashScreen class end

这应该只花费正常的时间来启动&#34; app&#34;并且没有延迟实施。