Motion Toast는 코틀린으로 개발된 토스트 라이브러리다. API 레벨 21부터 사용이 가능한데, 제공되는 디자인이 4개나 되어서 사용자가 원하는 대로 디자인을 선택해 토스트 메세지를 만들 수 있다는 장점이 있다. 또한 일반적인 토스트 메세지는 보통 한 줄의 메세지만 적어서 넣을 수가 있는데, Motion Toast는 내용 뿐만 아니라 타이틀까지 사용자가 임의로 적을 수 있다.
다만 내가 사용해 봤을 때 느꼈던 단점을 꼽자면 다른 토스트 라이브러리들에 비해 작성해야 하는 코드가 길고(다른 토스트 메세지들은 코드 한 줄이면 구현할 수 있다), 기본 크기가 커서 작은 크기의 토스트를 선호하는 사람들에게는 불호일 수 있다.
JitPack repository를 build.gradle(Project)에 추가한다.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
build.gradle(Module)에 종속 항목을 추가한다.
dependencies {
implementation 'com.github.Spikeysanju:MotionToast:1.4'
}
이후 토스트 메세지를 사용하고 싶은 곳에서 Motion Toast를 호출한다. 4개의 원하는 디자인(Motion, ColorMotion, Dark, DarkColor) 중 하나를 선택한 후, 타이틀과 내용을 적고 MotionToastStyle을 통해 토스트의 용도(Success, Error, Warning, Info) 및 위치, 폰트를 지정하면 끝이다.
MotionToastStyle.TOAST_TYPE
: 토스트 타입(SUCCESS, ERROR, WARNING, INFO, DELETE)
MotionToast.GRAVITY_BOTTOM
: 토스트가 나타나는 위치(TOP, BOTTOM, CENTER)
MotionToast.DURATION
: 토스트 지속 시간(LONG, SHORT)
ResourcesCompat.getFont
: 토스트 내의 텍스트 폰트
MotionToast.darkColorToast(
context as Activity,
"완료",
"일기 저장",
MotionToastStyle.SUCCESS,
MotionToast.GRAVITY_BOTTOM,
MotionToast.LONG_DURATION,
ResourcesCompat.getFont(context as Activity, www.sanju.motiontoast.R.font.helvetica_regular)
)
내가 사용해 본 결과는 다음과 같다.
토스트 위치를 GRAVITY_TOP 또는 GRAVITY_CENTER로 지정했을 경우 다음과 같이 한쪽으로 쏠려서 나타나는 문제가 있었다. 깃헙 이슈를 확인해보니, 해당 문제는 MotionToast가 아닌 Gravity의 속성을 사용해야 문제가 해결된다고 한다.
binding.openToast.setOnClickListener {
MotionToast.createToast(
requireContext() as Activity,
"SUCCESS 😍",
"성공!",
MotionToastStyle.SUCCESS,
Gravity.CENTER_HORIZONTAL,
MotionToast.LONG_DURATION,
ResourcesCompat.getFont(requireContext(),R.font.sc_dream4))
}
Fancy Toast는 API 레벨 15부터 사용 가능한 토스트 라이브러리다. 기본, Info, Success, Warning, Error, Confusing 총 6개의 디자인이 기본적으로 제공되고, 토스트 내의 아이콘을 변경하거나 오른쪽 상단의 아이콘을 제거하는 등 커스텀해서 사용할 수도 있다. 디자인 면에선 Motion Toast 보다 조금 제한적이라고 생각할 수 있지만, 코드 한 줄이면 구현이 가능하고 좀 더 직관적으로 메세지를 표현할 수 있어서 개인적으론 Motion Toast보다 더 자주 사용할 것 같은 라이브러리다.
mavenCentral Repository를 build.gradle(Project)에 추가한다.
allprojects {
repositories {
...
mavenCentral()
}
build.gradle(Module)에 종속 항목을 추가한다.
dependencies {
...
implementation 'io.github.shashank02051997:FancyToast:2.0.1'
}
토스트 메세지를 사용하고 싶은 곳에서 Fancy Toast를 호출한다.
FancyToast.makeText(context,"save",FancyToast.LENGTH_SHORT,FancyToast.SUCCESS,true).show()
FancyToast.makeText(context,"delete", FancyToast.LENGTH_SHORT, FancyToast.INFO,true).show()
FancyToast.makeText(
Context context,
CharSequence message,
int duration,
int type,
boolean androidIcon)
FancyToast.LENGTH
: 토스트 지속 시간
FancyToast.TOAST_TYPE
: 토스트 타입(SUCCESS, WARNING, INFO, ERROR, CONFUSING, DEFAULT, CUSTOM)
boolean
: 토스트 상단의 안드로이드 모양 아이콘 유무
내가 사용해 본 결과는 다음과 같다.
Styleable Toast는 API레벨 16부터 사용 가능한 토스트 라이브러리다. 기본적인 UI는 Fancy Toast와 그렇게 다르지 않지만, 폰트, 배경색, 아이콘 등 토스트의 전반적인 디자인을 styles.xml에서 원하는 대로 지정해 줄 수 있다는 점이 가장 큰 장점이다. 디자인 관점에서 Fancy Toast보다 더 자유롭다고 할 수 있고, 그렇기 때문에 내가 가장 추천하고 싶은 토스트 라이브러리다.
build.gradle(Module)에 종속 항목을 추가한다.
dependencies {
implementation 'io.github.muddz:styleabletoast:2.4.0'
}
styles.xml에서 원하는 토스트 디자인을 정의한다.
<style name="logoutToast">
<item name="stTextBold">true</item>
<item name="stTextColor">@color/mainColor</item>
<item name="stFont">@font/dosis</item>
<item name="stTextSize">14sp</item>
<item name="stColorBackground">@color/white</item>
<item name="stStrokeWidth">3dp</item>
<item name="stStrokeColor">#fff</item>
<item name="stIconStart">@drawable/favorite</item>
<item name="stIconEnd">@drawable/favorite</item>
<item name="stLength">SHORT</item> LONG or SHORT
<item name="stGravity">top</item> top or center
<item name="stRadius">20dp</item>
</style>
stTextBold
: 텍스트 스타일 Bold 유무
stTextColor
: 텍스트 색상
stFont
: 폰트
stTextSize
: 텍스트 사이즈
stColorBackground
: 배경색
stStrokeWidth
: 테두리 두께
stStrokeColor
: 테두리 색상
stIconStart
: 왼쪽에 나타날 아이콘
stIconEnd
: 오른쪽에 나타날 아이콘
stLength
: 지속 시간
stGravity
: 위치
stRadius
: 가장자리 둥글게
토스트 메세지를 사용하고 싶은 곳에서 Styleable Toast를 호출한다.
this@MainActivity.let { StyleableToast.makeText(it, "logout", R.style.logoutToast).show() }
context?.let { StyleableToast.makeText(it, "Welcome", R.style.joinToast).show() }
내가 사용해 본 결과는 다음과 같다.
토스트 라이브러리는 내가 앞서 설명한 3가지의 라이브러리 뿐만 아니라 다수의 라이브러리가 존재한다. 위 라이브러리들이 마음에 들지 않는다면, 다음의 사이트에서 원하는 토스트 라이브러리를 찾아보길 바란다. 😀