nonaktifkan gerakan gesek yang membuka laci navigasi di android

Jawaban:

438

Kamu harus menggunakan:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Ini berhasil bagi saya, gesekan untuk membuka laci dinonaktifkan.

Jika masih tidak berhasil, lihat jawaban yang disediakan di sini .

Tran Hieu
sumber
1
Apakah kamu yakin Saya mencoba tetapi itu diaktifkan membuka dan menutup, keduanya. Saya menguji pada android 2.3x dengan kerangka kerja ActionBarSherlock.
thanhnh
94
Untuk memperjelas: DrawerLayout.LOCK_MODE_LOCKED_OPEN mengunci laci ke keadaan terbuka sehingga pengguna tidak dapat menyembunyikannya. DrawerLayout.LOCK_MODE_LOCKED_CLOSED mengunci laci ke keadaan tertutup sehingga pengguna tidak dapat membukanya. Terakhir, DrawerLayout.LOCK_MODE_UNLOCKED membuka kunci laci sehingga dapat dibuka atau ditutup.
egfconnor
4
Jika Anda belum memilikinya mDrawerLayout, tetapkan sebagai berikut:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle
4
Tapi bagaimana kalau kita ingin mengontrol buka / tutup dengan ikon aplikasi saja, dan tidak menggesek? Apakah ada cara untuk melakukan itu? Saya ingin tahu karena saya mencoba menerapkan yang baru ToolBar(API 21) dan menggunakan SlidingTabLayoutfitur yang dimilikinya, yang bertentangan dengan Nav saya. laci menggesek. Jadi saya lebih suka menonaktifkan Nav. laci slide yang mendukung ToolBarfitur geser.
Azurespot
2
ini menonaktifkan seluruh laci (mis. ikon tidak berfungsi lagi), tidak hanya menggesek, maka tidak menjawab pertanyaan - yang secara khusus disebut menggesek
HelloWorld
101

untuk mengunci Anda dapat melakukan ini:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

dan untuk membuka kunci:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
saleh sereshki
sumber
Terima kasih telah mengklarifikasi jawaban yang diterima dengan bendera LOCK_MODE_UNLOCKED
Mattia Ruggiero
1
Saya pikir ini lebih baik daripada jawaban yang diterima karena juga memperkenalkan metode yang berlawanan
TheWhiteLlama
Jika saya menggunakan mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); untuk menguncinya tutup laci jadi, untuk mengunci saya menggunakan mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi
15

Tambahkan nilai gravitasi juga saat menggunakan setDrawerLockMode () ;

Melakukan hal ini :

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

Ini harus bekerja seperti pesona

Burhan Shakir
sumber
2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); kunci kedua Drawer dan drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); mewakili Laci mana yang ingin Anda kunci terima kasih lelaki itu bekerja untuk saya dan menghemat waktu saya.
Sanjeev Sangral
Di sumber saat ini, sepertinya 3 untuk kiri dan 5 untuk kanan akan berfungsi seperti yang diharapkan, tetapi GravityCompat.END tidak.
ProjectJourneyman
6

Untuk menggesekkan menonaktifkan, menimpa onInterceptTouchEventdan onTouchEventpada DrawerLayoutdan mereka kembali palsu.

Halo Dunia
sumber
Ini jawaban yang benar. Biarkan saya menguraikan ini sedikit lebih dalam jawabannya.
Martin Vysny
4

Jawaban untuk menonaktifkan swiping adalah yang benar. Saya pikir LOCK_MODE_LOCKED_CLOSED berfungsi di Compat 24.x, tetapi fungsinya telah diubah di pustaka compat yang lebih baru dan LOCK_MODE_LOCKED_CLOSED sekarang sepenuhnya mencegah menu nav untuk ditampilkan, bahkan melalui penggunaan menu hamburger.

Kelas berikut ini cocok untuk saya (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)
  }
}
Martin Vysny
sumber
0

Ini bekerja untuk saya

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
pengguna350524
sumber