5 Ways To Show A Message In Android

Heejin Ryu·2021년 2월 15일
0

android

목록 보기
1/3

android weekly를 기반으로 만들어졌습니다.

App은 모두 사용자와 interaction을 해야하죠! 그리고 메세지는 그 사이에서 아주 중요한 역할을 하구요.

메세지는 굉장히 다양하고 많이 경험했을 거에요. 인터넷 연결이 끊겼을 때, 이메일을 지우거나 사진을 올릴 때. 등등등~~~

다양한 용도의 메세지들이 있을텐데, 우리는 개발자로서 사용자에게 어떻게 효과적으로 노출시킬지를 고민할겁니다.

그래서 오늘은 간단하게, 메세지를 다루는 5개의 방법을 볼 거에요:)

다들 이미 알고 계실거지만 슬~쩍 준비해보았습니다. ㅎ

So, Which tool to use in which case?

음, 안드로이드 메세지는 다양한 종류로 보여줄 수 있을거에요. 그래서 그 5개의 종류를 보기 전에 카테고리를 만들어보겠습니다.

External and Internal messages

첫 번째로 메세지를 분류하는 방법은 소스로 메세지를 분류하는 방법이에요. Internal message는 app 내부에서 올거에요. 예를들어서 어떤 api call을 진행하는 동안 커넥션 에러가 났다던지요. External messages는 외부 서버로부터 올 수 있을거에요. 예를들어 English를 배워야하는 reminder notification 같은 것을 말할 수 있을거에요.

Foreground and Background messages

우리는 항상 메세지를 ui 스레드에서 보여주기 때문에 background message라는건 없을것입니다. 이 필자는 WorkManager로부터 앱이 background에 있을 때 우리가 메세지를 보낼 수 있다고 합니다. 그리고 앱이 다시 보일 때 foreground 에서 메세지를 트리거 해주는 것이죠.

Message Priority

우리는 또 메세지의 Priority! 즉 우선순위를 생각해 볼 수 있습니다. 높은 우선순위를 가진 메세지는 영구적이고 ui에서 계속해서 보여야하고, 반면에 낮은 우선순위를 가진 메세지는 작고 자동적으로 없어져야 하죠.

어떤 메세지는 유저 flow를 잠깐 멈추고 보여줘야 할 만큼 중요할 수도 있습니다. 예를 들어 유저가 주문을 취소할 때, "주문을 취소하시겠습니까?"를 보여주는 메세지로 막는 것 처럼 말이죠.

지금부터는 위에 있는 카테고리를 기준으로 어떤 안드로이드 툴을 어떤 때에 사용해야할지 분류해보도록 하겠습니다 XD

어떤 메세지를 보여주려 할 때는 한 번 몇 가지 기준을 고려해보고 tool을 정하면 best-suited tool이 될거에요:)

Toast

toast는 메세지를 보여주는 가장 오래된? 툴이죠. 굉장히 빠르게 작은 메세지를 보여줄 수 있습니다.

토스트 메세지는 ui 가장 윗 부분에서 보여지고 어떤 뷰에도 얽히지 않습니다. 이것 때문에 우리는 앱이 background에 있어도 토스트를 띄울수가 있습니다.

Toast.makeText(applicationContext, "Hello", Toast.LENGTH_LONG).show()

메세지는 자동적으로 없어지고, 유저를 방해하지 않습니다.

앱이 백그라운드에 있을 때나, 앱이 꺼질 가능성이 있는, 낮은 우선순위의 메세지를 보여줄 때 이 컴포넌트를 사용합니다.

알람 앱이 좋은 예시인데, 유저가 알람을 맞추고 앱을 끄더라도 알람이 맞춰졌다는 토스트가 짧은시간 동안 보여집니다.

필자는 Toast를 낮은 우선순위의 메세지를 앱이 foreground에 있는 동안 보여주고 싶을 땐 쓰지말라고 해요. 이 때는 Snackbar 을 사용하라고 합니다.

Snackbar

스낵바는 앱의 바닥 부분에서 메세지를 보여주는 컴포넌트 입니다.

스낵바는 어떤 뷰와 함께 묶여 있어야 하기 때문에 꼭 앱이 foreground에 있을 때에만 보여집니다.

토스트와 마찬가지로 간단한 코드를 통해서 스낵바를 사용할 수 있습니다.

Snackbar.make(contextView, "Hello", Snackbar.LENGTH_LONG).show()

토스트와 비슷한 코드인데, context 대신 view를 넘기는게 다릅니다. 이 뷰는 스낵바를 띄우고 싶은 뷰여야 하고, 보통 스낵바를 트리거 하는 뷰 입니다.

스낵바는 굉장히 flexible하게 사용이 가능해서 커스텀이 가능합니다. 또한 action button을 지원하기 때문에, 예를들어 메일 앱에서 사용자가 몇 개의 메일을 지운다고 하면 스낵바로 "Mail deleted"를 보여주며 옆에 "Undo" action button을 보여줄 수 있을 것입니다.

Snackbar.make(contextView, "Mail deleted", Snackbar.LENGTH_LONG)
  .setAction(R.string.action_undo) {
    // Handle the Undo button
  }
  .show()

스낵바는 낮은 우선순위 메세지를 보여줄 때 사용하면 좋습니다.

그럼 중요한 정보라서 좀 더 잘 보여야한다면 어떤 걸 쓰는 게 좋을까요?

배너는 스낵바의 improved 버전이라고 할 수 있습니다. 배너는 toolbar 바로 아래 UI의 가장 top 에 존재하고, 유저에게 보여져야 하는 메세지를 보여줍니다.

배너는 유저가 1가지나 2가지의 액션을 할 수 있도록 버튼을 요구하는데요, 이로써 유저에게 우리 메세지를 더 잘 보여줄 수 있는 기회가 되곤 합니다. 하지만 배너는 ui부분의 하나이기 때문에 유저의 행동을 따로 막진 않아서 유저가 충분히 무시할 수 있습니다.

하지만 배너를 위한 공직적인 문서나 지원은 없기 때문에, third-party library를 따로 사용하거나, 자체적으로 만들어야합니다.

요약하자면, 스낵바보다 더욱 많이 메세지가 노출되어야 할 때 사용하거나, 또는 한 두개의 액션 버튼이 필요하다면 사용합니다.

Dialog

어쩔 땐, 메세지가 굉장히 중요해서 유저의 플로우를 잠깐 막고 어떤 액션을 취하도록 할 수도 있어야 할거에요. Dialog가 그 역할을 합니다.

이 화면은 UI 가장 상단에 보여지면서 몇 가지 액션을 하라는 요구를 하게 됩니다. 다이얼로그느는 보통 타이틀, 메세지, 두 액션 버튼으로 이루어져 있습니다. 꼭 중요한 정보를 전달할 때, 몇가지 액션이 필요할 때 사용하도록 합니다!

AlertDialog.Builder(this)
  .setTitle("Title")
  .setMessage("Message")
  .setPositiveButton("Yes") { dialog, button ->

  }
  .setNegativeButton("No") { dialog, button ->

  }
  .show()

Notifications

notification은 앱의 외부에서 메세지를 주는 형식이죠.

보통 notification은 앱이 백그라운드에 있는 동안 중요한 일? 이 생기면 만들어지고, 또 외부 이벤트가 일어나면 생기기도 하죠. 예를들어 새로운 메일을 받았을 때 노티를 받습니다~

메세지를 보여주는 데에는 많은 방법이 있지만, 어느 때에 어떤 컴포넌트를 쓸지 한 번 더 고민해보는 것이 중요하다고 생각하고, 한 번 정리해보았습니당!

필자는 디자이너에게 물어봐서 심플하지만 효과적으로 메세지를 보여줄 수 있는 방법을 함께 고민해보라고 하네요!

Summary

Reference

https://vladsonkin.com/choose-wisely-5-ways-to-show-a-message-in-android/

profile
Chocolate lover🍫 & Junior Android developer🤖

0개의 댓글