vô hiệu hóa cử chỉ vuốt mở ngăn điều hướng trong Android


Câu trả lời:


436

Bạn nên sử dụng:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Nó làm việc cho tôi, thao tác vuốt để mở ngăn kéo đã bị vô hiệu hóa.

Nếu nó vẫn không hoạt động, hãy xem câu trả lời được cung cấp ở đây .


1
Bạn có chắc không? Tôi đã cố gắng nhưng nó đã được mở và đóng, cả hai. Tôi đã thử nghiệm trên Android 2.3x với khung ActionBarSherlock.
thanhnh

94
Để làm rõ: DrawerLayout.LOCK_MODE_LOCKED_OPEN khóa ngăn kéo ở trạng thái mở để người dùng không thể ẩn nó. DrawerLayout.LOCK_MODE_LOCKED_CLposed khóa ngăn kéo về trạng thái đóng để người dùng không thể mở nó. Cuối cùng, DrawerLayout.LOCK_MODE_UNLOCKED mở khóa ngăn kéo để có thể mở hoặc đóng.
egfconnor

4
Nếu bạn chưa có mDrawerLayout, hãy đặt nó như sau:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle

4
Nhưng làm thế nào nếu chúng ta chỉ muốn kiểm soát mở / đóng bằng biểu tượng ứng dụng và không vuốt? Có cách nào làm được việc này không? Tôi tò mò vì tôi đang cố gắng triển khai ToolBar(API 21) mới và sử dụng SlidingTabLayouttính năng mà nó có, điều này mâu thuẫn với Nav của tôi. ngăn kéo vuốt. Vì vậy, tôi muốn vô hiệu hóa Nav. ngăn kéo trượt có lợi cho các ToolBartính năng trượt.
Azurespot

2
điều này vô hiệu hóa toàn bộ ngăn kéo (ví dụ biểu tượng không hoạt động nữa), không chỉ vuốt, do đó không trả lời câu hỏi - mà cụ thể là nói đến việc vuốt
HelloWorld

101

để khóa bạn có thể làm điều này:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

và để mở khóa:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

Cảm ơn bạn đã làm rõ câu trả lời được chấp nhận với cờ LOCK_MODE_UNLOCKED
Mattia Ruggiero

1
Tôi nghĩ rằng điều này tốt hơn câu trả lời được chấp nhận vì nó cũng giới thiệu phương pháp đối lập
TheWhiteLlama

Nếu tôi đã sử dụng mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLposed); để khóa nó đã đóng ngăn kéo, vì vậy, để khóa tôi đã sử dụng mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

Thêm giá trị trọng lực khi sử dụng setDrawerLockMode () ;

Làm cái này :

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

Điều này sẽ làm việc như một nét duyên dáng


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLposed); khóa cả Ngăn kéo và ngăn kéoLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLposed, GravityCompat.END); đại diện cho ngăn kéo nào bạn muốn khóa nhờ người đàn ông nó làm việc cho tôi và tiết kiệm thời gian của tôi.
Sanjeev Sangral

Trong các nguồn hiện tại, có vẻ như 3 cho bên trái và 5 cho bên phải sẽ hoạt động như mong đợi, nhưng GravityCompat.END thì không.
ProjectJTHERman

6

Để vô hiệu hóa thao tác vuốt, ghi đè onInterceptTouchEventonTouchEventbật DrawerLayoutvà trả lại sai.


Đây là câu trả lời chính xác. Hãy để tôi giải thích thêm về điều này một chút trong câu trả lời.
Martin Vysny

4

Câu trả lời để vô hiệu hóa vuốt là câu trả lời đúng. Tôi nghĩ LOCK_MODE_LOCKED_CLposed đã hoạt động trong Compat 24.x, nhưng chức năng đã được thay đổi trong các thư viện compat mới hơn và LOCK_MODE_LOCKED_CLposed hiện ngăn chặn hoàn toàn menu điều hướng hiển thị, ngay cả khi sử dụng menu hamburger.

Lớp sau đây hoạt động với tôi (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

Điều này làm việc cho tôi

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.