시계 모드 문제 해결

Wear OS by Google용 맞춤 시계 모드를 만드는 것은 알림 및 웨어러블 관련 활동을 만드는 것과 상당히 다릅니다. 이 클래스에서는 처음 몇몇 시계 모드를 구현할 때 발생할 수 있는 몇 가지 문제의 해결 방법을 소개합니다.

다음 관련 리소스를 참조하세요.

화면의 모양 감지

일부 Wear OS 기기의 화면은 정사각형인 반면 다른 기기의 화면은 원형입니다. 원형 화면이 있는 기기는 화면 하단에 인셋(또는 '하단부')을 포함할 수 있습니다. 디자인 가이드라인에 설명된 것처럼 시계 모드는 화면의 특정 모양에 맞아야 하며 그러한 모양을 활용해야 합니다.

Wear OS를 사용하면 시계 모드에서 런타임에 화면 모양을 확인할 수 있습니다. 화면이 정사각형인지 원형인지를 감지하려면 다음과 같이 CanvasWatchFaceService.Engine 클래스의 onApplyWindowInsets() 메서드를 재정의합니다.

Kotlin

    private inner class Engine : CanvasWatchFaceService.Engine() {
        internal var mIsRound: Boolean = false
        internal var chinSize: Int = 0

        override fun onApplyWindowInsets(insets: WindowInsets) {
            super.onApplyWindowInsets(insets)
            mIsRound = insets.isRound
            chinSize = insets.systemWindowInsetBottom
        }
        ...
    }
    

자바

    private class Engine extends CanvasWatchFaceService.Engine {
        boolean mIsRound;
        int chinSize;

        @Override
        public void onApplyWindowInsets(WindowInsets insets) {
            super.onApplyWindowInsets(insets);
            mIsRound = insets.isRound();
            chinSize = insets.getSystemWindowInsetBottom();
        }
        ...
    }
    

시계 모드를 그릴 때 디자인을 조정하려면 mIsRoundmChinSize 멤버 변수의 값을 확인합니다.

미리보기 카드 수용

참고: 미리보기 카드는 Wear 1.x 앱에만 나타납니다.

사용자가 알림을 받을 때 알림 카드는 시스템 UI 스타일에 따라 화면의 상당 부분을 차지할 수 있습니다. 알림 카드가 표시되어 있는 동안에도 사용자가 시간을 확인할 수 있도록 이러한 상황에 맞게 시계 모드를 조정해야 합니다.

아날로그 시계 모드는 알림 카드가 있을 때 조정할 수 있습니다. 예를 들어 미리보기 카드로 덮이지 않은 화면의 부분 안에 맞게 시계 모드의 크기를 조정할 수 있습니다. 미리보기 카드로 덮이지 않은 화면 영역에 시간을 표시하는 디지털 시계 모드는 일반적으로 조정이 필요하지 않습니다. 시계 모드를 조정할 수 있도록 미리보기 카드 위의 빈 공간을 확인하려면 WatchFaceService.Engine.getPeekCardPosition() 메서드를 사용합니다.

대기 모드에서 미리보기 카드는 배경이 투명합니다. 시계 모드의 대기 모드에서 카드 근처에 세부정보가 포함되어 있는 경우 사용자가 카드의 내용을 읽을 수 있도록 주변에 검은색 사각형을 그릴 수 있습니다.

시스템 표시기 구성

시스템 표시기를 계속 표시하려면 화면상의 위치 및 WatchFaceStyle 인스턴스를 만들 때 배경 보호의 필요 여부를 구성할 수 있습니다.

  • 상태 표시줄의 위치를 설정하려면 setStatusBarGravity() 메서드를 사용합니다.
  • 핫워드의 위치를 설정하려면 setHotwordIndicatorGravity() 메서드를 사용합니다.
  • 반투명 회색 배경으로 상태 표시줄과 핫워드를 보호하려면 setViewProtection() 메서드를 사용합니다. 일반적으로 시스템 표시기가 흰색이어서 시계 모드의 배경이 밝은 경우 이 메서드가 필요합니다.

시스템 표시기에 대한 자세한 내용은 시스템 UI 구성디자인 가이드라인을 참조하세요.

상대적인 측정치 사용

여러 제조업체의 Wear OS 기기는 화면의 크기와 해상도가 다양합니다. 절대적인 픽셀 값이 아닌 상대적인 측정치를 사용하여 시계 모드를 이러한 변형에 맞게 조정해야 합니다.

시계 모드를 그릴 때 Canvas.getWidth()Canvas.getHeight() 메서드로 캔버스 크기를 가져오고 감지된 화면 크기의 일부인 값을 사용하여 그래픽 요소의 위치를 설정합니다. 미리보기 카드에 대응하여 시계 모드 요소의 크기를 조정하는 경우 카드 위 남은 공간의 일부인 값을 사용하여 시계 모드를 다시 그립니다.