안드로이드에서 탐색 창을 여는 스 와이프 동작을 비활성화


답변:


438

다음을 사용해야합니다.

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

그것은 나를 위해 일했습니다. 서랍을 열려면 스 와이프가 비활성화되었습니다.

여전히 작동하지 않으면 여기에 제공된 답변을 확인 하십시오 .


1
확실합니까? 나는 시도했지만 오픈과 클로즈 둘 다 가능했다. ActionBarSherlock 프레임 워크를 사용하여 안드로이드 2.3x에서 테스트하고있었습니다.
thanhnh

94
명확히하기 위해 : DrawerLayout.LOCK_MODE_LOCKED_OPEN은 서랍을 열린 상태로 잠그므로 사용자가 숨길 수 없습니다. DrawerLayout.LOCK_MODE_LOCKED_CLOSED는 사용자가 서랍을 열 수 없도록 서랍을 닫힌 상태로 잠급니다. 마지막으로, DrawerLayout.LOCK_MODE_UNLOCKED는 드로어를 잠금 해제하여 열거 나 닫을 수 있습니다.
egfconnor

4
아직없는 경우 mDrawerLayout다음과 같이 설정하십시오.mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle

4
그러나 앱 아이콘으로 만 스 와이프하지 않고 열기 / 닫기를 제어하려면 어떻습니까? 그렇게 할 방법이 있습니까? 새로운 ToolBar(API 21) 을 구현하고 SlidingTabLayout내 기능과 충돌 하는 기능을 사용 하려고하기 때문에 궁금 합니다. 서랍 스 와이프. 따라서 Nav를 사용하지 않도록 설정하고 싶습니다. 서랍 슬라이드는 ToolBar슬라이딩 기능 을 선호 합니다.
Azurespot

2
이 비활성화 전체 서랍 (예 : 아이콘이 더 이상 작동하지 않습니다), 만 보내 주시면하지, 따라서 질문에 대답하지 않았다 - 특히 스 와이프 함
하여 HelloWorld

101

잠금을 위해 다음을 수행 할 수 있습니다.

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

그리고 잠금 해제 :

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

LOCK_MODE_UNLOCKED 플래그로 허용 된 답변을 명확하게 해주셔서 감사합니다
Mattia Ruggiero

1
나는 이것이 반대의 방법을 소개하기 때문에 이것이 받아 들여진 대답보다 낫다고 생각한다
TheWhiteLlama

mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED)를 사용한 경우; 그것을 잠그기 위해 서랍을 닫았으므로 잠그기 위해 mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

setDrawerLockMode () 사용시 중력 값도 추가하십시오 .

이 작업을 수행 :

drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);

이것은 매력처럼 작동해야합니다


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 드로어와 드로어를 모두 잠급니다. 어떤 서랍에 감사의 말을 전하고 싶은지 나타내고, 저에게 도움이됩니다.
Sanjeev Sangral 5

현재 소스에서는 왼쪽은 3, 오른쪽은 5가 예상대로 작동하지만 GravityCompat.END는 작동하지 않습니다.
ProjectJourneyman

6

스 와이프를 비활성화하려면 재정의 onInterceptTouchEventonTouchEvent켜기를 설정 DrawerLayout하고 false를 반환하도록합니다.


이것이 정답입니다. 답을 좀 더 자세히 설명하겠습니다.
Martin Vysny

4

스 와이프를 비활성화하는 답은 정답입니다. LOCK_MODE_LOCKED_CLOSED는 Compat 24.x에서 작동했지만 새로운 compat 라이브러리에서 기능이 변경되었으며 LOCK_MODE_LOCKED_CLOSED는 햄버거 메뉴를 사용하더라도 내비게이션 메뉴가 완전히 표시되지 않습니다.

다음 수업은 나를 위해 일합니다 (Kotlin).

class MyDrawerLayout(ctx: Context) : DrawerLayout(ctx) {
  var isSwipeOpenEnabled: Boolean = true

  override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
      if (!isSwipeOpenEnabled && !isDrawerVisible(Gravity.START)) {
          return false
      }
      return super.onInterceptTouchEvent(ev)
  }

  @SuppressLint("ClickableViewAccessibility")
  override fun onTouchEvent(ev: MotionEvent): Boolean {
      if (!isSwipeOpenEnabled && !isDrawerVisible(Gravity.START)) {
          return false
      }
      return super.onTouchEvent(ev)
  }
}

0

이것은 나를 위해 작동

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.