启动画面后运行主要活动

时间:2016-08-31 21:56:16

标签: android android-layout splash-screen

我在开始主要活动之前使用启动画面。我目前使用活动主题方法编码我的启动画面,而不是使用布局方法。我的代码中的所有内容在.java和.xml文件中看起来都很好(根据软件)因为我没有错误每次我在模拟器中单击应用程序图标时,它会显示启动画面然后应用程序退出而不显示我的主要活动。到目前为止,这是我的代码:

SplashActivity.java

package com.example.healthylife;

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

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

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

MainActivity.java:

package com.example.healthylife;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

这是我的manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.healthylife" >

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

    <activity android:name=".SplashActivity"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

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

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

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

</manifest>

非常感谢任何建议。

5 个答案:

答案 0 :(得分:0)

两件事:

  1. 仅定义一次intent-filter。 (在你的情况下是泼水)
  2. 不要立即启动MainActivity。添加延迟,例如使用处理程序。 (在你的Splash的onCreate里面)

    new Handler()。postDelayed(new Runnable(){

        @Override
        public void run() {
             Intent intent = new Intent(SplashActivity.this,       MainActivity.class);
            startActivity(intent);
            finish();
        }
    }, 1000);
    

答案 1 :(得分:0)

您可以在一个应用中只有一个启动器活动,因此从mainactivity移除清单的启动器/ intentfilter,然后在启动画面中添加处理程序以延迟几秒钟。

以下是代码: -

    Handler handle=new Handler();
    handle.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent =new    
         Intent(Splash_Screen.this,MainActivity.class);
            startActivity(intent);
            Splash_Screen.this.finish();
        }
    },2000);

答案 2 :(得分:0)

予。声明自定义drawable.xml文件,其中包含用于启动屏幕背景的项目。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item
        android:drawable="@color/blue"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/logo"/>
    </item>
</layer-list>

II。使用新的drawable作为背景在styles.xml中声明自定义样式。

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

如果您的API级别高于v19,则可以将状态栏和导航栏半透明设置属性android:windowTranslucentStatusandroid:windowTranslucentNavigation设置为true。

III。通过android:theme文件中的AndroidManifest.xml属性将此样式应用于您的启动活动。

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

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

src

答案 3 :(得分:-1)

在明显变化中:

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

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

在类别代码中使用 DEFAULT

延迟你可以使用处理程序:

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

            @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);

答案 4 :(得分:-1)

Try This:

   SplashScreen.java:  

public class SplashScreenActivity extends Activity{
protected int _splashTime = 5000;
IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);        
    //splashTread.start();
    TimerTask task=new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Log.d("init","splashcreenact-start");
            Log.d("init","splashcreenact-loaded");

            Intent actStudyWords = new Intent(getApplicationContext(), List.class);
            startActivityForResult(actStudyWords,1);
            Log.d("init","splashcreenact-end");
        }
    };
    Timer timer=new Timer();
    timer.schedule(task, _splashTime);
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();
    mHelper = null;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{     
    if (resultCode == RESULT_OK) 
    {
        finish();
    }
}

}

List.java

 public class List extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainlyt);
}}