Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Wear에서 전체 화면 활동 종료

왼쪽에서 오른쪽으로 스와이프하여 Wear OS 활동을 종료할 수 있습니다. 앱에 가로 스크롤이 있는 경우(예: 지도가 포함된 앱에서 사용 가능한 스크롤 유형) 콘텐츠의 가장자리로 이동하여 왼쪽에서 오른쪽으로 스와이프하면 활동이 종료됩니다.

전원 버튼을 누르면 시계 모드로 돌아갑니다.

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

스와이프하여 닫기 동작

현재 화면을 닫으려면 사용자는 왼쪽에서 오른쪽으로 스와이프합니다. 따라서 다음을 활용하는 것이 좋습니다.

또한 앱에 가로 스와이프 동작을 포함하지 않는 것이 좋습니다.

활동 닫기

활동은 스와이프하여 닫기 기능을 자동으로 지원합니다. 왼쪽에서 오른쪽으로 스와이프하면 활동이 닫히고 앱이 백 스택으로 이동합니다.

프래그먼트

다음과 같이 SwipeDismissFrameLayout 클래스에서 프래그먼트 포함 뷰를 래핑할 수 있습니다.

Kotlin

    class SwipeDismissFragment : Fragment() {
        private val callback = object : SwipeDismissFrameLayout.Callback() {
            override fun onSwipeStarted(layout: SwipeDismissFrameLayout) {
                // optional
            }

            override fun onSwipeCanceled(layout: SwipeDismissFrameLayout) {
                // optional
            }

            override fun onDismissed(layout: SwipeDismissFrameLayout) {
                // Code here for custom behavior such as going up the
                // back stack and destroying the fragment but staying in the app.
            }
        }

        override fun onCreateView(
                inflater: LayoutInflater,
                container: ViewGroup?,
                savedInstanceState: Bundle?
        ): View =
                SwipeDismissFrameLayout(activity).apply {

                    // If the fragment should fill the screen (optional), then in the layout file,
                    // in the androidx.wear.widget.SwipeDismissFrameLayout element,
                    // set the android:layout_width and android:layout_height attributes
                    // to "match_parent".

                    inflater.inflate(
                            R.layout.swipe_dismiss_frame_layout,
                            this,
                            false
                    ).also { inflatedView ->
                        addView(inflatedView)
                    }
                    addCallback(callback)
                }
    }
    

자바

    public class SwipeDismissFragment extends Fragment {
      private final Callback callback =
        new Callback() {
          @Override
            public void onSwipeStart() {
              // optional
            }

            @Override
            public void onSwipeCancelled() {
              // optional
            }

            @Override
            public void onDismissed(SwipeDismissFrameLayout layout) {
              // Code here for custom behavior such as going up the
              // back stack and destroying the fragment but staying in the app.
            }
          };

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        SwipeDismissFrameLayout swipeLayout = new SwipeDismissFrameLayout(getActivity());

        // If the fragment should fill the screen (optional), then in the layout file,
        // in the androidx.wear.widget.SwipeDismissFrameLayout element,
        // set the android:layout_width and android:layout_height attributes
        // to "match_parent".

        View inflatedView = inflater.inflate(R.layout.swipe_dismiss_frame_layout, swipeLayout, false);
        swipeLayout.addView(inflatedView);
        swipeLayout.addCallback(callback);

        return swipeLayout;
        }
    }
    

참고: SwipeDismissFrameLayout 클래스는 웨어러블 지원 라이브러리에서 지원 중단된 유사한 클래스를 대체합니다.

가로 스크롤 가능 뷰

패닝을 지원하는 지도가 포함된 뷰에서와 같은 일부 경우에는 사용자 인터페이스가 가로 스와이프를 방해하지 않습니다. 이 시나리오에는 두 가지 선택 사항이 있습니다.

  • 백 스택이 짧으면 사용자는 앱을 닫고 전원 버튼을 눌러 홈 화면(시계 모드)으로 돌아갈 수 있습니다.
  • 사용자가 백 스택으로 이동하도록 하려면 가장자리 스와이프를 지원하는 SwipeDismissFrameLayout 객체에서 뷰를 래핑할 수 있습니다. 뷰 또는 하위 요소가 canScrollHorizontally() 호출에서 true를 반환하면 가장자리 스와이프가 사용 설정됩니다. 가장자리 스와이프가 사용 설정되면 사용자는 뷰의 임의의 위치가 아닌 화면의 왼쪽 끝(현재 화면 너비의 10%로 설정됨)에서 스와이프하여 뷰를 닫을 수 있습니다.

SwipeDismissFrameLayout 객체에서 뷰를 래핑하려면 다음 예를 검토하세요.

레이아웃 파일용 XML

    <androidx.wear.widget.SwipeDismissFrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/swipe_dismiss_root" >

        <TextView
            android:id="@+id/test_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="Swipe me to dismiss me." />
    </androidx.wear.widget.SwipeDismissFrameLayout>
    

코드 스니펫

Kotlin

    activity?.findViewById<SwipeDismissFrameLayout>(R.id.swipe_dismiss_root)?.apply {
        addCallback(object : SwipeDismissFrameLayout.Callback() {

            override fun onDismissed(layout: SwipeDismissFrameLayout) {
                layout.visibility = View.GONE
            }
        })
    }
    

자바

    SwipeDismissFrameLayout testLayout =
        (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root);
    testLayout.addCallback(new SwipeDismissFrameLayout.Callback() {
        @Override
        public void onDismissed(SwipeDismissFrameLayout layout) {
            layout.setVisibility(View.GONE);
        }
      }
    );
    

일반적으로 권장되지 않음: 스와이프하여 닫기 사용 안함

일반적으로 사용자는 스와이프하여 화면을 닫을 수 있을 것으로 예상하므로 스와이프하여 닫기 기능을 사용 안함 설정하는 것은 권장되지 않습니다. 하지만 예외적인 경우에는 다음과 같이 스타일 리소스에서 기본 테마를 확장하고 android:windowSwipeToDismiss 속성을 false로 설정할 수 있습니다.

    <resources>
      <style name="AppTheme" parent="@android:style/Theme.DeviceDefault">
        <item name="android:windowSwipeToDismiss">false</item>
      </style>
    </resources>
    

사용자가 앱을 처음 사용할 때 전원 버튼을 눌러 앱을 종료할 수 있다고 알려줄 수 있습니다.

Wear 2.0 이전의 닫기 동작

Wear 2.0 이전에는 사용자가 길게 눌러 앱을 닫는 기능을 구현하기 위해 DismissOverlayView 클래스를 사용했습니다. DismissOverlayView 클래스는 더 이상 사용되지 않습니다.

또한 앱을 길게 눌러 닫는 것은 더 이상 권장되지 않습니다. 길게 눌러 전체 화면 활동(Google 지도와 같은 패닝 또는 몰입형 활동)을 닫는 기능을 구현하지 마세요.

전원 버튼을 통해 닫기

전원(하드웨어) 버튼을 누르면 전원 키 이벤트가 전송됩니다. 따라서 전원 버튼을 뒤로 버튼이나 일반적인 탐색용으로 사용할 수 없습니다.

전원 버튼을 누르면 홈 화면(시계 모드)으로 돌아갑니다. 다음과 같은 두 가지 예외가 있습니다.

  • 사용자가 IME(예를 들면 필기 인식 화면과 같은 입력 방식 편집기)에 있는 경우 버튼을 누르면 IME가 닫히고 앱으로 돌아갑니다.
  • 사용자가 시계 모드에 있는 경우 하드웨어 버튼을 누르면 앱 런처가 열립니다.

전원 버튼을 누르면 Activity 클래스의 isFinishing() 메서드가 true를 반환하지 않습니다(키 이벤트를 가로챌 수도 없음).