Android Q의 Gestural Navigation과 Drawer Layout이 경쟁하는 나의 최우해

7599 단어 AndroidQAndroid
Android QGestural Navigation는 기본이며 응용 프로그램에 대한 대응이 필요합니다.
Gestural Navigation에 대한 자세한 내용은 이 슬라이드에서 설명합니다.

무엇을 주의해야 합니까?


위의 슬라이드에서도 언급했듯이 Gestural Navigation
화면 양쪽에서 미끄러진 후 되돌아오는 행위
목록 상자에서 이 형식은 항목'없음'에 해당합니다.
즉, 지금까지 Drawer Layout은 화면 좌우에서 슬라이딩을 통해 표시되어 경쟁적이었다.
아무 것도 대처하지 않으면
Drawer를 표시하려고 했는데 애플리케이션이 종료되었습니다.
이런 동작은 사용자 체험이 좋지 않을 것이다.

어떻게 처리해야 좋을까요?


방법은 두 가지가 있다.
  • AndroidX를 사용한 DrawerLayout
  • 스스로 대응하기(내가 제시한 최우선해)
  • AndroidX의 Drawer Layout 사용


    build.gradle
    implementation 'androidx.drawerlayout:drawerlayout:1.1.0-alpha01'
    
    하면, 만약, 만약...
    - Drawer 종료 시: Drawer 열기
    - Drawer 켜기: 응용 프로그램 종료
    거동.
    도대체 이것이 정말 사용자가 요구하는 행동입니까?
    Gestural Navigation은 처음 시작하는 기능이므로 "사용자가 요구하는 행위"를 정의하기 어렵습니다.
    자꾸 안 어울려.
    그래서 우리는 최우선을 고려했다.

    스스로 대처하다


    안드로이드 버전의 트위터 공식 앱이 만든 Drawer의 발표 방식은 체험으로 매우 좋다고 생각합니다.
  • 화면 어디에서나 왼쪽에서 오른쪽으로 미끄러짐: Drawer 열기
  • 화면 양쪽으로 미끄러짐: Gestural Navigation 종료 어플리케이션
  • 저는 Android Q Beta 3를 넣고 매일 Gestural Navigation을 사용합니다.
    화면 양쪽에서 미끄러질 때 "되돌아오기"동작
    느낌따라서 트위터 공식 앱의 행동이 가장 적합한 해결 방안이라고 생각한다.

    구체적으로 실시하다


    샘플 코드가 https://github.com/furusin/GesturalNavigationSample로 향상되었습니다.
    화면상의 미끄럼 검사
    Android에서 뒤집기 이벤트 가져오기
    의 보도를 참고로 하다.
    AndroidX의 Drawer Layout을 사용하지 않고 GestureDetector.SimpleOnGestureListeneronFling()에서 화면의 미끄럼(flic)을 측정합니다.
    MainActivity.kt
    class MainActivity : AppCompatActivity() {
        companion object {
            // X軸最低スワイプ距離
            private const val SWIPE_MIN_DISTANCE = 50
            // X軸最低スワイプスピード
            private const val SWIPE_THRESHOLD_VELOCITY = 200
        }
    
        lateinit var gestureDetector: GestureDetector
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // 左から右へのスワイプでDrawerLayoutを開く
            gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
                override fun onFling(
                    event1: MotionEvent, event2: MotionEvent, velocityX: Float, velocityY: Float
                ): Boolean {
                    // 左から右へのフリックの判定
                    if (event2.x - event1.x > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                        findViewById<DrawerLayout>(R.id.drawerLayout).openDrawer(Gravity.LEFT)
                    }
                    return false
                }
            })
        }
    
        // ListViewの場合はonTouchEventではなく
        // dispatchTouchEventを使う
        override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
            // GestureDetectorにイベントを流す
            gestureDetector.onTouchEvent(ev)
            return super.dispatchTouchEvent(ev)
        }
    }
    

    총결산


    어때?
    본 기사가 집필되었을 때(2019/05/28) 안드로이드 Q는 베타3이고 Gestural Navigation의 행동 자체가 바뀔 수 있습니다.
    그러므로'이런 생각(회피하는 방법)'정도로포착하길 바란다.
    또 가로로 굴러가는 보기가 있으면 어떡하냐는 문제도 있어 고려할 수 없다.
    좀 더 생각해볼 필요가 있을 것 같아서요.

    좋은 웹페이지 즐겨찾기