我想讓個人應用看起來更專業,因此我決定要製做一個初始屏幕。 android
我將如何建立它而後實現它? ios
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Thread t=new Thread() { public void run() { try { sleep(2000); finish(); Intent cv=new Intent(MainActivity.this,HomeScreen.class/*otherclass*/); startActivity(cv); } catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); }
請注意,此解決方案不會讓用戶等待更多:啓動屏幕的延遲取決於應用程序的啓動時間。 app
當您打開任何android應用程序時,默認狀況下都會出現一些黑屏,其頂部和應用程序的圖標位於頂部,您可使用樣式/主題來對其進行更改。 ide
首先,在values文件夾中建立一個style.xml併爲其添加樣式。 post
<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar"> <item name="android:windowBackground">@drawable/splash_screen</item> </style>
除了使用@android:style/Theme.DeviceDefault.Light.NoActionBar
您還可使用其餘任何主題做爲父主題。 動畫
其次,在您的應用程序Manifest.xml中,將android:theme="@style/splashScreenTheme"
到您的主要活動中。 this
<activity android:name="MainActivity" android:label="@string/app_name" android:theme="@style/splashScreenTheme" >
第三,在onCreate()啓動活動中更新主題。 google
protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.mainAppTheme); super.onCreate(savedInstanceState); }
更新查看這篇文章https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd感謝@ mat1h和@adelriosantiago 編碼
默認狀況下,Splash Screnn不會自動使您的應用程序看起來更專業。 專業設計的啓動畫面可使您的應用程序看起來更加專業,可是若是您不知道如何編寫,則其他應用程序實際上將有多專業。 spa
擁有啓動畫面的惟一緣由(藉口)是由於您正在執行大量計算或正在等待GPS / WiFi啓動,由於您的應用程序依賴於啓動以前。 若是沒有這些計算的結果或沒法使用GPS / WiFi(等等),您的應用程序就會死在水中,所以您會以爲您須要啓動屏幕,而且必須阻止任何其餘正在運行的程序(包括背景程序)的屏幕視圖)。
這樣的啓動畫面應看起來像您的全屏應用程序,以給人以它已被初始化的印象,而後在完成冗長的計算以後,能夠填充最終的詳細信息(對圖像進行調整)。 是這樣的狀況或這是程序設計的惟一方式的可能性 很小 。
最好容許用戶(以及操做系統的其他部分)在等待時執行其餘操做,而不是將程序設計爲依賴會花費一些時間(等待時間不肯定)的程序。
手機上已經有圖標表示GPS / WiFi正在啓動。 初始屏幕佔用的時間或空間可用於加載預計算或實際執行計算。 有關您建立的問題以及必須考慮的問題,請參見下面的第一個連接。
若是您絕對必須等待這些計算或GPS / WiFi,則最好只是讓應用程序啓動並彈出一個彈出框,指出必須等待這些計算(TEXTUAL「正在初始化」消息是能夠的)。 可能須要等待GPS / WiFi(若是還沒有在其餘程序中啓用它們),所以無需宣佈其等待時間。
請記住,啓動屏幕啓動時,程序實際上已經在運行,您所要作的就是延遲使用程序,並拖延CPU / GPU來執行大多數沒必要要的操做。
每次啓動程序時,咱們最好真的要等待並看到您的啓動畫面,不然咱們不會以爲它寫的很專業。 使「啓動畫面」爲「全屏」並與實際程序的畫面重複(所以咱們認爲實際上它還沒有初始化)可能會實現您的目標(使您的程序看上去更專業),但我對此不會打賭。
爲何不這樣作: http : //cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/
怎麼作: https : //encrypted.google.com/search?q = Android + splash + screen + source
所以,有充分的理由不這樣作,可是若是您肯定本身的狀況超出了這些示例的範圍,則上面提供了執行此操做的方法。 確保它確實使您的應用程序看起來更專業,或者您已經擊敗了這樣作的惟一理由。
就像YouTube頻道同樣,每一個視頻都以冗長的圖形簡介(和Outro)開頭,或者感受有必要講個笑話或說明過去一週(不是喜劇或生活風格頻道)發生了什麼。 只是顯示節目! (只需運行該程序)。
啓動畫面示例:
public class MainActivity extends Activity { private ImageView splashImageView; boolean splashloading = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); splashImageView = new ImageView(this); splashImageView.setScaleType(ScaleType.FIT_XY); splashImageView.setImageResource(R.drawable.ic_launcher); setContentView(splashImageView); splashloading = true; Handler h = new Handler(); h.postDelayed(new Runnable() { public void run() { splashloading = false; setContentView(R.layout.activity_main); } }, 3000); } }
上面的答案很好,但我想補充一下。 我是Android新手,在開發過程當中遇到了這些問題。 但願這能夠幫助像我這樣的人。
閃屏是我應用程序的入口,所以在AndroidManifest.xml中添加如下幾行。
<activity android:name=".SplashActivity" android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
初始屏幕在應用程序生命週期中僅應顯示一次,我使用布爾變量記錄初始屏幕的狀態,而且僅在第一次顯示。
public class SplashActivity extends Activity { private static boolean splashLoaded = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!splashLoaded) { setContentView(R.layout.activity_splash); int secondsDelayed = 1; new Handler().postDelayed(new Runnable() { public void run() { startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } }, secondsDelayed * 500); splashLoaded = true; } else { Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class); goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(goToMainActivity); finish(); } } }
祝您編碼愉快!