एंड्रॉइड में नेविगेशन दराज खोलने वाले स्वाइप जेस्चर को अक्षम करें


187

मैं Google द्वारा नेविगेशन ड्रावर गाइड का अनुसरण कर रहा हूं और मैं इसे टैब और इशारों के साथ एक गतिविधि में जोड़ना चाहूंगा।

मैं नेविगेशन ड्रॉअर खोलने के लिए इशारे को अक्षम करना चाहता हूं, क्या किसी को कोई विचार नहीं है कि यह कैसे करना है?

जवाबों:


438

आपको उपयोग करना चाहिए:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

इसने मेरे लिए काम किया, दराज खोलने के लिए कड़ी चोट अक्षम थी।

यदि यह अभी भी काम नहीं करेगा, तो यहां दिए गए उत्तर की जांच करें


1
क्या आपको यकीन है? मैंने कोशिश की, लेकिन यह खुला और करीब दोनों को निष्क्रिय कर दिया गया था। मैं ActionBarSherlock ढांचे के साथ Android 2.3x पर परीक्षण कर रहा था।
थान्नह

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);
स्टीव लैड

4
लेकिन कैसे के बारे में अगर हम केवल ऐप आइकन के साथ खुले / बंद को नियंत्रित करना चाहते हैं, और स्वाइप नहीं कर रहे हैं? क्या ऐसा करने के लिए कोई रास्ता है? मैं उत्सुक हूं क्योंकि मैं नए ToolBar(एपीआई 21) को लागू करने की कोशिश कर रहा हूं और SlidingTabLayoutइसमें उस सुविधा का उपयोग कर रहा हूं , जो मेरे नव के साथ संघर्ष कर रहा है। दराज स्वाइप करना। इसलिए मैं नव को निष्क्रिय कर दूंगा। ToolBarस्लाइडिंग सुविधा के पक्ष में दराज स्लाइड ।
Azurespot

2
यह पूरे दराज को निष्क्रिय कर देता है (जैसे आइकन अब काम नहीं करता है), न कि केवल स्वाइपिंग, इसलिए इस सवाल का जवाब नहीं दिया - जो विशेष रूप से स्वाइपिंग को संदर्भित करता है
HelloWorld

101

ताला लगाने के लिए आप यह कर सकते हैं:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

और अनलॉक के लिए:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

LOCK_MODE_UNLOCKED ध्वज के साथ स्वीकार किए जाते हैं जवाब स्पष्ट करने के लिए धन्यवाद
मेटिया रगइएरो

1
मुझे लगता है कि यह स्वीकार किए गए उत्तर से बेहतर है क्योंकि यह विरोध विधि का भी परिचय देता है
TheWhiteLlama

अगर मैंने mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED) का उपयोग किया; इसे लॉक करने के लिए ड्रॉअर को बंद कर दिया, ताकि लॉकिंग के लिए मैंने mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_OPEN) का उपयोग किया;
SH मेहंदी

15

गुरुत्वाकर्षण का मान जोड़ें जब भी setDrawerLockMode () का उपयोग करें ;

यह करो :

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

यह एक आकर्षण की तरह काम करना चाहिए


2
mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); दोनों दराज और drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END) को लॉक करें; प्रतिनिधित्व करें कि आप किस ड्रॉअर को धन्यवाद देना चाहते हैं, यह मेरे लिए काम करता है और मेरा समय बचाता है।
संजीव संगराल

वर्तमान स्रोतों में, यह बाईं ओर 3 के लिए और दाईं ओर 5 के लिए उम्मीद के अनुसार काम करेगा, लेकिन GravityCompat.END ऐसा नहीं करता है।
ProjectJourneyman


4

स्वाइप को अक्षम करने का उत्तर सही है। मुझे लगता है कि LOCK_MODE_LOCKED_CLOSED ने संगत 24.x में काम किया है, लेकिन कार्यक्षमता को नए कॉम्पिटिटर लाइब्रेरी में बदल दिया गया है और LOCK_MODE_LOCKED_CLOSED अब पूरी तरह से हैमबर्गर मेनू का उपयोग करके भी, नव मेनू को दिखाने से रोकता है।

निम्न वर्ग मेरे लिए काम करता है (कोटलिन):

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});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.