啟動畫面
文章推薦指數: 80 %
重要事項: 如果您先前已在Android 11 或以下版本中實作了自訂啟動畫面,就必須將應用程式遷移至 SplashScreen API,以確保其可在Android 12 及以上 ...
Platform
AndroidStudio
GooglePlay
Jetpack
Kotlin
Docs
Games
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
TiếngViệt
中文–简体
中文–繁體
日本語
한국어
Signin
Platform
AndroidStudio
GooglePlay
Jetpack
Kotlin
Docs
Games
AndroidDevelopers
啟動畫面
Stayorganizedwithcollections
Saveandcategorizecontentbasedonyourpreferences.
重要事項:如果您先前已在Android11或以下版本中實作了自訂啟動畫面,就必須將應用程式遷移至SplashScreenAPI,以確保其可在Android12及以上版本中正確顯示。
如需操作說明,請參閱將現有啟動畫面實作遷移至Android12。
Android12新增了SplashScreenAPI,當在搭載Android12及以上版本的裝置中執行時,會為所有應用程式啟用新的應用程式啟動動畫。
這包括啟動時的應用程式內建動態、顯示應用程式圖示的啟動畫面,以及應用程式自身的轉換。
圖1:啟動畫面樣本
新版服務每次推出應用程式時,都會提供標準設計元素,但您也可以自訂應用程式,讓應用程式保有獨特的品牌宣傳元素。
除了直接使用SplashScreenAPI之外,您亦可使用SplashScreen相容性程式庫,其中也包含了SplashScreenAPI。
啟動畫面的運作方式
當使用者在應用程式執行程序未執行時啟動應用程式(冷啟動)或活動尚未建立(暖啟動)時會發生下列事件。
(熱啟動期間一律不會顯示啟動畫面)。
系統會根據你定義的主題和任何動畫來顯示啟動畫面。
應用程式就緒後,即可關閉啟動畫面並顯示應用程式。
動畫的元素與機制
動畫元素是由Android資訊清單中的XML資源檔案定義。
每種元素都有淺色和深色模式版本。
包括視窗背景、動畫應用程式圖示及圖示背景:
圖2:啟動畫面的可自訂元素
請留意這些元素的以下注意事項:
應用程式圖示(1)應該是一個向量可繪項目,可以是靜態或者是動畫。
雖然動畫時長不限,但建議不超過1,000毫秒。
根據預設,使用了啟動器圖示。
圖示背景(2)是可選項,如果圖示和視窗背景之間需要更高的對比度,則此選項就能派上用場。
如果使用自動調整圖示,當視窗背景的對比度夠高時,就會顯示其背景。
如同自動調整圖示,有三分之一的前景會被遮蓋(3)。
視窗背景(4)包含單一不透明顏色。
如果已設定視窗背景且為純色,當未設定屬性時,則根據預設使用此背景。
啟動畫面尺寸
啟動畫面圖示使用的規格與自動調整圖示相同,如下所示:
品牌圖片:大小應為200×80dp。
含有圖示背景的應用程式圖示:大小應為240×240dp,且符合直徑為160dp的圓環。
不含圖示背景的應用程式圖示:大小應為288×288dp,且符合直徑為192dp的圓環。
舉例來說,如果圖片的原尺寸為300×300dp,圖示應符合直徑200dp的圓環。
圓環以外的所有內容都會被隱藏(遮蓋)。
圖3:分別針對實心和透明背景設計了啟動畫面圖示尺寸
啟動畫面動畫
啟動畫面動畫機制包含進入與結束動畫。
進入動畫包含啟動畫面的檢視畫面。
它由系統控制,無法自訂。
結束動畫由隱藏啟動畫面的動畫放送組成。
如需自訂,必須有SplashScreenView及其圖示的存取權限,並可在其中放送任意動畫、設定其變形、不透明度和顏色。
如果發生這種情況,必須在動畫結束後手動移除啟動畫面。
自訂應用程式中的啟動畫面
根據預設,如果是單色及啟動器圖示,則SplashScreen使用windowBackground主題。
在應用程式主題中新增屬性,才能自訂啟動畫面。
可以透過下列任一方式自訂應用程式的啟動畫面:
設定主題屬性以變更外觀
延長在螢幕上的停留時間
自訂用於關閉啟動畫面的動畫
為啟動畫面設定一個主題以變更外觀
你可以在「活動」主題中指定下列屬性,藉此自訂應用程式的啟動畫面。
如果您繼續使用舊版啟動畫面(使用android:windowBackground等屬性),請考慮提供Android12及以上版本的替代資源檔案。
使用windowSplashScreenBackground在背景中填入特定單一顏色:
如果物件透過AnimationDrawable和AnimatedVectorDrawable建立動畫屬性及可繪項目,則也必須設定windowSplashScreenAnimationDuration以在顯示起始視窗的同時播放動畫。
做此設定不會影響啟動畫面的實際顯示時間,不過您可以在使用SplashScreenView#getIconAnimationDuration自訂啟動畫面結束動畫時進行擷取。
請參閱下一節的延長啟動畫面的停留時間部分,瞭解更多資訊。
如果視窗背景與圖示之間的對比度不夠高,這項功能就能派上用場。
設計指南不建議使用品牌宣傳圖片。
如果您需要非同步載入少量資料(例如本機磁碟的應用程式內設定),可以使用ViewTreeObserver.OnPreDrawListener暫停應用程式繪製其首個頁框。
如果您在繪圖前就啟用活動完成(例如沒有在onResume前設定內容檢視畫面並完成設定),就不需要預先繪製事件監聽器。
Kotlin
//Createaneweventfortheactivity.
overridefunonCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
//Setthelayoutforthecontentview.
setContentView(R.layout.main_activity)
//SetupanOnPreDrawListenertotherootview.
valcontent:View=findViewById(android.R.id.content)
content.viewTreeObserver.addOnPreDrawListener(
object:ViewTreeObserver.OnPreDrawListener{
overridefunonPreDraw():Boolean{
//Checkiftheinitialdataisready.
returnif(viewModel.isReady){
//Thecontentisready;startdrawing.
content.viewTreeObserver.removeOnPreDrawListener(this)
true
}else{
//Thecontentisnotready;suspend.
false
}
}
}
)
}
Java
//Createaneweventfortheactivity.
@Override
protectedvoidonCreate(@NullableBundlesavedInstanceState){
super.onCreate(savedInstanceState);
//Setthelayoutforthecontentview.
setContentView(R.layout.main_activity);
//SetupanOnPreDrawListenertotherootview.
finalViewcontent=findViewById(android.R.id.content);
content.getViewTreeObserver().addOnPreDrawListener(
newViewTreeObserver.OnPreDrawListener(){
@Override
publicbooleanonPreDraw(){
//Checkiftheinitialdataisready.
if(mViewModel.isReady()){
//Thecontentisready;startdrawing.
content.getViewTreeObserver().removeOnPreDrawListener(this);
returntrue;
}else{
//Thecontentisnotready;suspend.
returnfalse;
}
}
});
}
自訂用於關閉啟動畫面的動畫
您可以透過Activity.getSplashScreen()進一步自訂啟動畫面的動畫。
Kotlin
overridefunonCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
//...
//Addacallbackthat'scalledwhenthesplashscreenisanimatingto
//theappcontent.
splashScreen.setOnExitAnimationListener{splashScreenView->
//Createyourcustomanimation.
valslideUp=ObjectAnimator.ofFloat(
splashScreenView,
View.TRANSLATION_Y,
0f,
-splashScreenView.height.toFloat()
)
slideUp.interpolator=AnticipateInterpolator()
slideUp.duration=200L
//CallSplashScreenView.removeattheendofyourcustomanimation.
slideUp.doOnEnd{splashScreenView.remove()}
//Runyouranimation.
slideUp.start()
}
}
Java
@Override
protectedvoidonCreate(@NullableBundlesavedInstanceState){
super.onCreate(savedInstanceState);
//...
//Addacallbackthat'scalledwhenthesplashscreenisanimatingto
//theappcontent.
getSplashScreen().setOnExitAnimationListener(splashScreenView->{
finalObjectAnimatorslideUp=ObjectAnimator.ofFloat(
splashScreenView,
View.TRANSLATION_Y,
0f,
-splashScreenView.getHeight()
);
slideUp.setInterpolator(newAnticipateInterpolator());
slideUp.setDuration(200L);
//CallSplashScreenView.removeattheendofyourcustomanimation.
slideUp.addListener(newAnimatorListenerAdapter(){
@Override
publicvoidonAnimationEnd(Animatoranimation){
splashScreenView.remove();
}
});
//Runyouranimation.
slideUp.start();
});
}
透過啟動此回呼,會在啟動畫面上開始動畫向量可繪項目。
視應用程式啟動時間長度而定,可繪項目可能會出現在動畫的中間。
使用SplashScreenView.getIconAnimationStart瞭解動畫開始的時間。
可按照以下方法計算圖示動畫的剩餘時間:
Kotlin
//Getthedurationoftheanimatedvectordrawable.
valanimationDuration=splashScreenView.iconAnimationDuration
//Getthestarttimeoftheanimation.
valanimationStart=splashScreenView.iconAnimationStart
//Calculatetheremainingdurationoftheanimation.
valremainingDuration=if(animationDuration!=null&&animationStart!=null){
(animationDuration-Duration.between(animationStart,Instant.now()))
.toMillis()
.coerceAtLeast(0L)
}else{
0L
}
Java
//Getthedurationoftheanimatedvectordrawable.
DurationanimationDuration=splashScreenView.getIconAnimationDuration();
//Getthestarttimeoftheanimation.
InstantanimationStart=splashScreenView.getIconAnimationStart();
//Calculatetheremainingdurationoftheanimation.
longremainingDuration;
if(animationDuration!=null&&animationStart!=null){
remainingDuration=animationDuration.minus(
Duration.between(animationStart,Instant.now())
).toMillis();
remainingDuration=Math.max(remainingDuration,0L);
}else{
remainingDuration=0L;
}
ContentandcodesamplesonthispagearesubjecttothelicensesdescribedintheContentLicense.JavaandOpenJDKaretrademarksorregisteredtrademarksofOracleand/oritsaffiliates.
Lastupdated2022-05-13UTC.
[{
"type":"thumb-down",
"id":"missingTheInformationINeed",
"label":"MissingtheinformationIneed"
},{
"type":"thumb-down",
"id":"tooComplicatedTooManySteps",
"label":"Toocomplicated/toomanysteps"
},{
"type":"thumb-down",
"id":"outOfDate",
"label":"Outofdate"
},{
"type":"thumb-down",
"id":"translationIssue",
"label":"Translationissue"
},{
"type":"thumb-down",
"id":"samplesCodeIssue",
"label":"Samples/codeissue"
},{
"type":"thumb-down",
"id":"otherDown",
"label":"Other"
}]
[{
"type":"thumb-up",
"id":"easyToUnderstand",
"label":"Easytounderstand"
},{
"type":"thumb-up",
"id":"solvedMyProblem",
"label":"Solvedmyproblem"
},{
"type":"thumb-up",
"id":"otherUp",
"label":"Other"
}]
Twitter
Follow@AndroidDevonTwitter
YouTube
CheckoutAndroidDevelopersonYouTube
LinkedIn
ConnectwiththeAndroidDeveloperscommunityonLinkedIn
MoreAndroid
Android
AndroidforEnterprise
Security
Source
News
Blog
Podcasts
Discover
Gaming
MachineLearning
Privacy
5G
AndroidDevices
Largescreens
WearOS
AndroidTV
Androidforcars
AndroidThings
ChromeOSdevices
Releases
Android11
Android10
Pie
Oreo
Nougat
Marshmallow
Lollipop
KitKat
DocumentationandDownloads
AndroidStudioguide
Developersguides
APIreference
DownloadStudio
AndroidNDK
Support
Reportplatformbug
Reportdocumentationbug
GooglePlaysupport
Joinresearchstudies
Android
Chrome
Firebase
GoogleCloudPlatform
Allproducts
Privacy
License
Brandguidelines
Getnewsandtipsbyemail
Subscribe
English
BahasaIndonesia
Español–AméricaLatina
Português–Brasil
TiếngViệt
中文–简体
中文–繁體
日本語
한국어
延伸文章資訊
- 1如何建立登入過程的畫面(SplashScreen)
其實會需要啟動畫面有一種說法是早期PC時代由於記憶體很少要載入到作業系統需要 ... <RelativeLayout xmlns:android="http://schemas.android....
- 2启动画面| Android 开发者
从Android 12 开始,在搭载Android 12 或更高版本的设备上运行时,所有应用都将拥有启动动画。这包括启动时的进入应用动作、显示应用图标的启动画面,以及 ...
- 3啟動顯示畫面- Xamarin | Microsoft Learn
Android 應用程式需要一些時間才能啟動,特別是在第一次在裝置上啟動應用程式時。 啟動顯示畫面可能會向使用者顯示啟動進度,或表示商標。
- 4Android App歡迎畫面(幾秒後進入主頁面) @ 嵌入式的復健筆記
本篇是將cookiesp大大的文章內碼部份加以描述,透過Android中的『AndroidManifest.xml』檔來設定歡迎畫面,並在歡迎畫面的『Activity.java』檔中經過 ...
- 5啟動畫面
重要事項: 如果您先前已在Android 11 或以下版本中實作了自訂啟動畫面,就必須將應用程式遷移至 SplashScreen API,以確保其可在Android 12 及以上 ...