openCustomDialog를 통한 맞춤형 “Toast-like” 알림 (Font Size & Panel Size)

발행: (2026년 3월 16일 AM 10:28 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

openCustomDialog을 이용한 커스터마이즈 가능한 “Toast‑like” 알림 (폰트 크기 & 패널 크기)

요구 사항 설명

내장 openToast API에서는 제공하지 않는 폰트 크기패널 너비/높이/테두리 반경/배경을 조정할 수 있는 Toast‑like 일시적인 메시지를 제공합니다.

배경 지식

  • Toast (Instant Feedback): 일시적인 피드백 UI.
    가이드:

  • 전역 커스텀 다이얼로그 (UIContext): PromptAction.openCustomDialog를 통해 앱 전반에 걸친 풍부한 프롬프트를 제공하는 것이 권장됩니다.
    가이드:

  • Toast API 제한: UIContext.getPromptAction().openToast폰트 크기패널 크기를 지정할 수 없습니다.
    API 레퍼런스:

구현 단계

  1. 빌더를 사용해 Toast 내용을 구성합니다(예: 커스텀 fontSize, 색상, 정렬을 적용한 Text).
  2. openCustomDialog비모달 커스텀 다이얼로그를 열고 width/height/cornerRadius/backgroundColor를 전달합니다.
  3. 짧은 지연 후 closeCustomDialog를 호출해 자동 소멸시킵니다.
    • 비모달이며 중앙 정렬오프셋을 주어 Toast 동작을 흉내냅니다.

코드 스니펫 / 설정

let customDialogId: number = 0

@Builder
function customDialogBuilder() {
  Column() {
    // Fully customizable typography & colors
    Text('Custom Toast').fontSize(20).fontColor('#fff')
  }
  .width('100%')
  .height('100%')
  .justifyContent(FlexAlign.Center)
  .alignItems(HorizontalAlign.Center)
}

@Entry
@Component
struct Index {
  @Builder
  customDialogComponent() {
    customDialogBuilder()
  }

  build() {
    Row() {
      Column() {
        Text('Show Toast-like Dialog')
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.getUIContext().getPromptAction().openCustomDialog({
              builder: () => this.customDialogComponent(),
              // Visual container controls (Toast‑like panel)
              backgroundColor: 'rgba(0,0,0,0.8)',
              backgroundBlurStyle: BlurStyle.NONE,
              cornerRadius: 5,
              width: '50%',   // panel width
              height: 50,     // panel height
              isModal: false, // non‑modal, like Toast
              alignment: DialogAlignment.Center,
              offset: { dx: 0, dy: 100 }
            }).then((dialogId: number) => {
              customDialogId = dialogId
              setTimeout(() => {
                this.getUIContext().getPromptAction().closeCustomDialog(customDialogId)
              }, 1500)
            })
          })
      }.width('100%')
    }.height('100%')
  }
}

테스트 결과

  • 텍스트 폰트 크기패널 너비/높이/코너 반경/배경을 완전히 제어할 수 있음을 확인했습니다.
  • 자동 소멸이 약 1.5 초에 안정적으로 동작하며, 인터랙션은 비모달 상태를 유지합니다.

Test GIF

제한 사항 또는 고려 사항

  • openToast은 구현이 간단하지만 타이포그래피패널 크기를 커스터마이즈할 수 없습니다. 기본 메시지에만 사용하세요.
  • 복잡한 스타일링이나 브랜드화된 토스트가 필요할 경우 **openCustomDialog**를 사용하고, 접근성(대비, 크기)도 함께 고려하세요.
  • 안전 영역디바이스 변형(웨어러블의 원형·컴팩트 화면 등)도 반드시 검토해야 합니다.

관련 문서 또는 링크

  • Toast 가이드:
  • 전역 커스텀 다이얼로그 가이드:
  • PromptAction.openToast API:
0 조회
Back to Blog

관련 글

더 보기 »

2026년 SwiftUI: 모든 것을 바꾼 7가지 기능

SwiftUI는 이제 더 이상 “프로토타입 전용”이 아니다. SwiftUI가 2019년에 출시되었을 때, 회의론자들은 이것이 프로덕션에 적합하지 않다고 말했습니다. 2026년에는, 이것이 기본 선택이 되었습니다…