Android'de gezinme çekmecesini açan kaydırma hareketini devre dışı bırak


Yanıtlar:


438

Kullanmalısın:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

Benim için çalıştı, çekmeceyi açmak için tokatlamak devre dışı bırakıldı.

Hala çalışmazsa, burada verilen cevaba göz atın .


1
Emin misiniz? Denedim ama her ikisi de açık ve kapalı oldu. ActionBarSherlock framework ile android 2.3x üzerinde test yapıyordum.
thanhnh

94
Açıklığa kavuşturmak için: DrawerLayout.LOCK_MODE_LOCKED_OPEN, çekmeceyi açık duruma kilitler, böylece kullanıcı gizleyemez. DrawerLayout.LOCK_MODE_LOCKED_CLOSED, çekmeceyi kapalı duruma kilitler, böylece kullanıcı açamaz. Son olarak, DrawerLayout.LOCK_MODE_UNLOCKED çekmecenin kilidini açar, böylece açılabilir veya kapatılabilir.
egfconnor

4
Henüz sahip değilseniz mDrawerLayout, şu şekilde ayarlayın:mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
Steve Liddle

4
Ancak, açma / kapama işlemini yalnızca uygulama simgesiyle kontrol etmek istiyorsak, kaydırmamaya ne dersiniz? Bunu yapmanın bir yolu var mı? Merak ediyorum çünkü yeni ToolBar(API 21) ' i uygulamaya ve SlidingTabLayoutNav'ımla çelişen özelliği kullanmaya çalışıyorum . çekmece kaydırma. Bu yüzden Nav'ı devre dışı bırakmayı tercih ederim. çekmece slayt ToolBarkayma özelliği lehine .
Azurespot

2
bu, çekmecenin tamamını devre dışı bırakır (örneğin, simge artık çalışmaz), sadece kaydırmakla kalmaz, bu nedenle soruyu cevaplamaz - özellikle kaydırmaya atıfta bulunur
HelloWorld

101

kilitleme için şunları yapabilirsiniz:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

ve kilidini açmak için:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

LOCK_MODE_UNLOCKED bayrağıyla kabul edilen yanıtı açıkladığınız için teşekkür ederiz
Mattia Ruggiero

1
Bence karşıt yöntemi de tanıtıyor - çünkü kabul edilen cevaptan daha iyi
TheWhiteLlama

MDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED) kullandıysam; kilitlemek için çekmeceyi kapattı, kilitlemek için mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN);
SH Mehdi

15

SetDrawerLockMode () kullanırken yerçekimi değerini de ekleyin ;

Bunu yap :

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

Bu bir cazibe gibi çalışmalı


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); hem Çekmeceyi hem de çekmeceyi kilitleLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); kilitlemek istediğiniz Çekmeceyi temsil edin, teşekkürler adam benim için çalışıyor ve zamanımı kurtarıyor.
Sanjeev Sangral

Mevcut kaynaklarda, sol için 3 ve sağ için 5 gibi görünüyor, ancak GravityCompat.END çalışmıyor.
ProjectJourneyman

6

Devre dışı hızlıca kaydırmak, geçersiz kılma için onInterceptTouchEventve onTouchEventüzerinde DrawerLayoutve onlara sahip return false.


Bu doğru cevap. Cevabı biraz daha açıklayayım.
Martin Vysny

4

Kaydırmayı devre dışı bırakmanın cevabı doğrudur. Bence LOCK_MODE_LOCKED_CLOSED Uyum 24.x'te çalıştı, ancak işlevsellik daha yeni uyumluluk kütüphanelerinde değiştirildi ve LOCK_MODE_LOCKED_CLOSED artık hamburger menüsünü kullanarak bile gezinme menüsünün gösterilmesini tamamen engelliyor.

Aşağıdaki sınıf benim için çalışıyor (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

Bu benim için çalışıyor

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, {Your drawer view});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.