2013-02-06 89 views
2

我想用這個java和xml代碼實現一個啓動畫面。我從我的主要活動創建了一個單獨的java類,並將java代碼放在裏面。我在佈局文件中創建了一個xml佈局,並將xml代碼放入其中。不過,我的應用通常沒有啓動畫面。它從不顯示,但該應用程序沒有任何錯誤。 Eclipse也沒有顯示任何錯誤。這可能是什麼原因?先謝謝你。這是代碼。啓動畫面不會顯示

的Java:

package com.carouseldemo.main; 

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

public class Splash extends Activity { 

    private final int SPLASH_DISPLAY_LENGHT = 1000; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.splash); 

     /* New Handler to start the Menu-Activity 
     * and close this Splash-Screen after some seconds.*/ 
     new Handler().postDelayed(new Runnable(){ 
      @Override 
      public void run() { 
       /* Create an Intent that will start the Menu-Activity. */ 
       Intent mainIntent = new Intent(Splash.this,Menu.class); 
       Splash.this.startActivity(mainIntent); 
       Splash.this.finish(); 
      } 
     }, SPLASH_DISPLAY_LENGHT); 
    } 
} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content" 
       android:layout_height="fill_parent" android:src="@drawable/cat" 
       android:layout_gravity="center"/> 
     <TextView android:layout_width="fill_parent" 
       android:layout_height="wrap_content" android:text="Hello World, splash"/> 
</LinearLayout> 

清單:

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

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" android:screenOrientation="portrait"/> 
    <application android:icon="@drawable/buttonone" android:label="@string/app_name"> 

     <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
</manifest> 
+1

啓動畫面顯示時間爲1秒,您可以將它保持在4-5秒左右並再次檢查。 –

+0

我把時間增加到了10秒。它顯示大約一秒鐘的黑屏並打開應用程序。 –

+0

Manifest文件怎麼樣?你有沒有註冊啓動屏幕作爲啓動活動..你可以發佈你的manisfest文件嗎? –

回答

1

MainActivity是清單文件發射活動。所以,飛濺不顯示。

將啓動器活動MainActivity更改爲Splash併爲MainActivity編寫另一個活動。

<application android:icon="@drawable/buttonone" android:label="@string/app_name"> 

     <activity android:name=".Splash" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".MainActivity" /> 
    </application> 
+0

我想知道如何在活動中同時擁有MainActivity作爲android名稱和Splash。感謝您證明這一點。每個人都是對的,但這是解決問題的方法。 –

1

與此更換處理器部分:

Thread splashThread = new Thread() { 
    public void run() { 
       try { 
       Thread.sleep(SPLASH_DISPLAY_LENGHT); 
       } catch (Exception e) { 
       } finally { 
       Intent i = new Intent(Splash.this,Menu.class); 
       startActivity(i); 
       finish(); 
       } 
      } 
     }; 
    splashThread.start(); 
+0

啓動畫面仍然不出現。謝謝你的迴應,你有其他想法嗎? –

+0

Menu.class的全部內容是什麼? – spacetime

+0

是否有任何服務後立即飛濺? – spacetime

0

另一種方式來實現用CountDownTimer

public class MyCounter extends CountDownTimer { 

     public MyCounter(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onFinish() { 

      startActivity(new Intent(SplashScreen.this, 
        TabSample.class)); 
      finish(); 

      MCObject.cancel(); 



     } 

     @Override 
     public void onTick(long millisUntilFinished) { 

     } 

    } 

OnCreate

 MyCounter MCObject; 
    MCObject = new MyCounter(3000, 100); 
    MCObject.start(); 
0

更換你的處理

new Thread(new Runnable() { 
    public void run() { 
     try { 
      Thread.sleep(SPLASH_TIME); 
      startActivity(intent); 
      finish(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
}).start(); 
+0

這也行不通。你還有其他建議嗎? –

+0

除非我應該用我自己的代碼來代替意圖嗎? –

1

試試如下:

public class Splash extends Activity 
    { 
    private final int SPLASH_DISPLAY_LENGHT = 1000; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.splash); 
       new Thread(){ 
     public void run() 
     { 
      try 
      { 
       sleep(SPLASH_DISPLAY_LENGHT); 
       Intent mainIntent = new Intent(Splash.this,Menu.class); 
         Splash.this.startActivity(mainIntent); 
         Splash.this.finish(); 
      } 
      catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     };   
    }.start(); 
} 

編輯:

<activity android:name=".Splash" android:label="@string/app_name" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+0

你的代碼沒有帶來錯誤,但是啓動頁面也沒有出現。 –

+0

我可以看到你已經在manifest中設置了定義的'MainActivity'作爲啓動器。另外你應該定義'Splash'作爲啓動器。請改變它。並檢查我的答案。 – GrIsHu

1
private static final int STOPSPLASH = 0; 
private static final long SPLASHTIME =3000; 



public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      setContentView(R.layout.splash); 
      context = getApplicationContext(); 
      if(savedInstanceState == null){ 
       Message msg = new Message(); 
       msg.what = STOPSPLASH; 
       spHandler.sendMessageDelayed(msg, SPLASHTIME); 
      } 
     } 


    private Handler spHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) 
     { 
      switch (msg.what) 
      { 
      case STOPSPLASH: 
       gotoHomeScreen(); 
       break; 
      default: 
       break; 
      } 
      super.handleMessage(msg); 
     } 
    }; 

    public void gotoHomeScreen(){ 

     Intent i = new Intent(); 
      i.setClass(Splash.this,Home.class); 
      startActivity(i); 
      finish(); 
      spHandler = null; 

    } 

嘗試。

在您的清單

<activity android:name="Splash" android:configChanges="keyboardHidden" android:theme="@android:style/Theme.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
0

使用此代碼,它可能會幫助你。

public class SplashScreenActivity extends Activity { 

    protected int _splashTime = 2000; 

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

     Thread splashTread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        sleep(_splashTime); 
       } 
      } catch (InterruptedException e) { 
       // do nothing 
      } finally { 
       startActivity(new Intent(SplashScreenActivity.this, 
         MainActivity.class)); 
       SplashScreenActivity.this.finish(); 
      } 
     } 
    }; 
    splashTread.start(); 
} 

希望它能幫助你。