인프런 커뮤니티 질문&답변

hjworld1025님의 프로필 이미지
hjworld1025

작성한 질문수

윤재성의 Kotlin 기반 안드로이드 앱 개발 Part4 - 실전 프로젝트

22강 App2_Splash 화면 구현

그대로 작성했는데.. 스플래시화면에 로고가 안보입니다

작성

·

521

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
setTheme(R.style.Theme_MapService) 입력 전에는
MainActivity 테마에 로고가 잘 나오는걸 확인했는데요..
 
setTheme(R.style.Theme_MapService) 입력 후 확인해보면
splash.xml에서 설정한 android:src="@drawable/soft_logo"없이
android:drawable="@color/white"만 보이는데요 무슨문제일까요...
 
 

답변 2

0

안녕하세요.

저도 현재 쓰는 핸드폰 기종이 갤럭시 노트 20 인데요.

아마 OS 버전이 최신인 경우 위와 같은 오류가 발생 하는 것 같아요.

저도 안드로이드 스튜디오 가상머신으로는 잘 되는데, 제 휴대폰은 안되더라구요.
(제 안드로이드 가상머신 : Galaxy Nexus API 27)

그리고, 아마 white만 뜨시는 것이 아니라 splash.xml 자체가 로딩이 안되실 것 같습니다.

예제에서 메인 엑티비티에서 잠시 SystemClock으로 시간 텀을 주고

다른 테마로 변경하고 UI요소들을 로딩하잖아요.

 

그런데, 가상머신 정도의 OS 버전일 때는 SystemClock으로 텀을 주면

drawable의 splash.xml이 적용되는 거 같은데, 

최신버전에서는 이게 안되고 그냥 통째로 정지되는 것 같아 보이더라구요

(이건 제 주측이라.. 다른 원인 또는 문제일 수도 있습니다.)

 

그래서 아래의 두가지 방법으로 스플래시 화면이 안뜨는 것을 해결해봤는데요.

 

첫째는, 테마로 스플래시화면을 구현하는게 아니라 액티비티로 스플래시 화면 구현하기

(가장 쉬운 대안이지만, 이 방법이 별로다 싶으면 두번째를 추천드려요)

 

두번째는,  splash를 위한 layout.xml을 만들어서 그걸 메인 액티비티에 적용시킨 후,

SystemClock 대신 Handler로 시간 텀을 준 뒤 원래 테마와 레이아웃을 로딩하는 방법.

(저는 첫번째 하다가 이 두번째가 그나마 원래 강사님의 의도와 가장 비슷하게 구현한것 같아서

이걸로 적용해 봤어요)

 

// 윗부분 생략
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setTheme(R.style.Theme_splash)
        setContentView(R.layout.layout_splash)

        Handler(Looper.getMainLooper()).postDelayed({

            // Splash 화면 이후로 보여질 원래 테마로 설정
            setTheme(R.style.Theme_App1_Memo)
            setContentView(binding.root)

            // Toolbar를 설정함.
            setSupportActionBar(binding.mainToolbar)
            title = "메모앱"

            //Recycler View 셋팅
            val main_recycler_adapter = MainRecylcerAdapter()
            binding.memoRecycler.adapter = main_recycler_adapter
            binding.memoRecycler.layoutManager = LinearLayoutManager(this)


        }, 1000)
 }
// 아래부분의 onResume() 이런 부분들 생략

 

여기서 원래 코드와 다른 부분은 onCreate() 밑에

setTheme()와 setContentView() 부분이고요. 사실 setTheme는 굳이 필요 없을 것 같아요.

저는 스플래시에 적용하고 싶은 테마스타일이 있어서 테마도 다시한번 적용시켜 주었습니다.

 

마지막으로 원래 작성했던 코드들을 전부 복사해서

Handler 안에다가 붙여 넣고 시간 텀은 1초정도 주고 로딩하도록 해줬어요.

이 방법으로 했을 때는 스플래시 화면이 보이더라구요!

 

답변이 도움이 되셨길 바래요 ㅎㅎ

 

0

소프트캠퍼스님의 프로필 이미지
소프트캠퍼스
지식공유자

안녕하세요 답변이 늦었습니다. 해당 부분은 금일 확인하여 답변을 올리도록 하겠습니다.

감사합니다.

안드로이드 12 이후로 해당 방법이 적용되지 않는듯 합니다

안드로이드에서 제공하는 방법대로 진행을 해보았지만 background color 조정은 되어도 로고는 나오지 않네요
https://www.masterqna.com/android/101190/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EC%8A%A4%ED%94%8C%EB%9E%98%EC%8B%9C-%ED%99%94%EB%A9%B4-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4-%EB%8F%84%EC%99%80%EC%A3%BC%EC%84%B8%EC%9A%94-%E3%85%9C%E3%85%9C
찾아서 적용해본 방법인데 혹시 해당 회차를 수정해서 재촬영해주실 수 있는지 문의드려봅니다

hjworld1025님의 프로필 이미지
hjworld1025

작성한 질문수

질문하기