본문 바로가기
Android

[Android] Java 에서 Kotlin 으로 넘어가기 3. Intent (Splash, Activity 이동)

by bryan.oh 2022. 2. 23.
반응형

Kotlin
StartActivity

 

앱의 시작은 Splash 화면이죠. ㅎㅎ;

이건 사람마다 호불호가 갈립니다.

"splash 화면에서 불필요한 시간을 낭비한다"
"회사의 로고 같은 광고 효과도 있다"
"최초 리소스를 로드하는데 보여주는 것이다"

등등..

전, 2~3초 정도로 앱의 로고든, 이미지든 광고효과가 좋다고 생각해서 주로 splash 화면을 만드는 편입니다.

 

kotlin 에서 new > Activity > FullScreenActivity 로 해봤는데, 뭔가 잡다한게 많이 뜨더군요.

그냥 new > Activity > EmptyActivity 로 생성합니다.

Launcher Activity 에 체크해주세요.

전 이름을 SplashActivity 로 했습니다.

layout 과 소스 파일이 생깁니다.

class SplashActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
    }
}

이렇게 하면 layout 에 지정한대로, (보통 ImageView씁니다.) 화면이 뜨겠죠.

여기서 FullScreen 이 되지 않아서 별로 이쁘지 않네요.

FullScreen 으로 변경하는 쉬운 방법은, 이전 글 참고해 주세요.

[Android] Activity Full Screen 만들기 ( 전체화면 )

전체화면의 splash

 

그럼 이제 일정 시간 후에 MainActivity로 넘어가야겠네요.

우선 MainActivity 로 넘어가기 위해서 Intent 를 사용해야 합니다.

(파라메터가 없을 경우)

val intent = Intent(this, MainActivity::class.java)
startActivity(intent)

 

일정 시간 후에 넘어가도록 하려면, Handler 를 사용해야 하는데,

보시는 것처럼 Empty Argument 생성자는 deprecated 되었습니다.

파라메터가 필요합니다.

Handler(Looper.getMainLooper()).postDelayed({
    val intent = Intent(this, MainActivity::class.java)
    startActivity(intent)
}, delayMillis.toLong())

함수를 만들어서 기능을 사용해 봤습니다.

전체 코드

import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.appcompat.app.AppCompatActivity


class SplashActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        delayedMove(3000)
    }

    private fun delayedMove(delayMillis: Int) {
        Handler(Looper.getMainLooper()).postDelayed({
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
        }, delayMillis.toLong())
    }
}

 

3초 후에 MainActivity 로 이동됩니다.

 

Intent 에 파라메너 넘기고 받는 방법

생성된 Intent 객체에서 intent.put.. 까지만 입력해도 많은 인자 타입의 함수가 나옵니다.

여기서 골라서 쓰시면 됩니다. 파라메터의 타입을 보고, 알아서 사용됩니다.

// SplashActivity.kt
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("USER_NAME", "hello~ bryan~")
startActivity(intent)

이렇게 MainActivity 로 파라메터를 전달하게 되면,

// MainActivity.kt
val userName: String? = intent.getStringExtra("USER_NAME")

이렇게 받아오면 됩니다.

 

받아올 땐, 타입에 따라 함수를 골라서 사용해야 합니다.

 

728x90
반응형

댓글