Android 12의 스플래시 화면
Android 12 Developer Preview에는 스플래시 화면 지원이 포함되어 있습니다. Android 12의 최종 릴리스까지 API가 변경되거나 기능이 다시 제거될 수도 있지만 현재 우리가 알고 있는 것을 보는 것은 흥미로울 것입니다.
궁금한? 자, 내 조사에 동참해...
먼저 새로운 인터페이스
android.window.SplashScreen
가 있습니다. 현재 문서는 다음과 같이 말합니다.The interface that apps use to talk to the splash screen.
Each splash screen instance is bound to a particular
Activity
. To obtain aSplashScreen
for anActivity
,
useActivity.getSplashScreen()
to get theSplashScreen
.
인터페이스에는 하나의 메서드가 포함되어 있습니다.
setOnExitAnimationListener()
Specifies whether an
Activity
wants to handle the splash
screen animation on its own. Normally the splash screen
will show on screen before the content of the activity has
been drawn, and disappear when the activity is showing on
the screen. With this listener set, the activity will
receiveOnExitAnimationListener#onSplashScreenExit
callback if splash screen is showed, then the activity can
create its own exit animation based on the
SplashScreenView
.Note that this method must be called before splash screen
leave, so it only takes effect during or before
Activity#onResume
.
이것을 실제로 보도록 노력합시다.
SplashScreen
는 인터페이스이므로 실제 구현을 보는 것은 흥미로울 것입니다.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "--> ${splashScreen::class.java.name}")
splashScreen.setOnExitAnimationListener {
Log.d(TAG, it::class.java.name)
}
setContentView(R.layout.activity_main)
}
}
코드를 실행하면
D/MainActivity: --> android.window.SplashScreen$SplashScreenImpl
가 출력됩니다.SplashScreenImpl
는 공개 API 클래스가 아니지만 런타임 중에 포함된 내용을 볼 수 있습니다.속성 중 하나인
mGlobal
는 SplashScreenManagerGlobal
를 참조합니다. 우리는 이 클래스에 대해 많이 알지 못하지만 내부를 들여다보면 알 수 있습니다.따라서 해당 속성 중 하나는
ArrayList
개체의 SplashScreenImpl
개체를 보유합니다.이것은 흥미롭지만 내 코드의 주요 문제에는 도움이 되지 않습니다. 두 번째 출력(
Log.d(TAG, it::class.java.name)
)이 인쇄되지 않습니다.이는
setOnExitAnimationListener()
를 사용하여 설정한 리스너가 호출되지 않음을 의미합니다. SplashScreen.OnExitAnimationListener
의 문서가 훌륭하게 들리기 때문에 안타깝습니다. 이 인터페이스는 onSplashScreenExit(SplashScreenView view)
한 가지 방법을 정의합니다.When receiving this callback, the
SplashScreenView
object
will be drawing on top of the activity. The
SplashScreenView
represents the splash screen view
object, developer can make an exit animation based on this
view.
그래서, 우리는 무엇을 해야 합니까?
타이밍 문제일 수도 있고 앱이 너무 빠를 수도 있습니다.
splashScreen.setOnExitAnimationListener {
Log.d(TAG, it::class.java.name)
}
Handler(mainLooper).postDelayed({
setContentView(R.layout.activity_main)
}, 5000)
아니요, 도움이 되지 않습니다. 다시 생각해 봅시다.
API 레벨 26(Oreo) 이후로 스플래시 화면 지원이 Android에 내장되지 않았나요?
오른쪽.
android.R.attr
는 windowSplashscreenContent
를 포함합니다. 문서는 다음과 같이 말합니다.Reference to a drawable to be used as the splash screen
content of the window. This drawable will be placed on top
of thewindowBackground
with its bounds inset by the
system bars. If the drawable should not be inset by the
system bars, use a fullscreen theme.
themes.xml 파일에서 다음과 같은 것을 추가할 수 있습니다.
<item name="android:windowSplashscreenContent">@drawable/anim</item>
멋진 스플래시 화면이 나타납니다. 그러나 내 리스너는 여전히 호출되지 않습니다(마지막 인용문에서 문서가 창을 참조함을 기억하십시오).
흥미로운 점:
android.R.attr
도 Developer Preview용으로 업데이트되었습니다.windowSplashScreenAnimatedIcon
Replace an icon in the center of the starting window
windowSplashScreenAnimationDuration
The duration, in milliseconds, of the window splash screen
icon animation duration when playing the splash screen
starting window. The maximum animation duration should be
limited below 1000ms.
windowSplashScreenBackground
The background color for the splash screen, if not specify
then system will calculate from windowBackground.
windowSplashScreenBrandingImage
Place an drawable image in the bottom of the starting
window, it can be used to represent the branding of the
application.
이러한 추가 사항이 이전 또는 새 API에 맞는지 명확하지 않습니다. 따라서 다음 미리 보기 및 베타 버전에서 어떤 일이 발생하는지 보는 것이 흥미로울 것입니다.
요약
지금까지 스플래시 화면과 관련된 새로운 인터페이스와 클래스를 사용할 수 없었습니다. 그 이유는 다음과 같습니다.
문서에 새 API가 활동을 기반으로 한다고 나와 있으므로 매니페스트에서 구성해야 할 수도 있습니다. 하지만 아직 이 가정을 뒷받침하는 증거를 찾지 못했습니다.
이것에 대한 당신의 생각은 무엇입니까? 의견에 귀하의 인상을 공유하십시오.
Reference
이 문제에 관하여(Android 12의 스플래시 화면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tkuenneth/splash-screens-in-android-12-4jfi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)