ปิดใช้งานรูปแบบการปัดนิ้วที่เปิดลิ้นชักการนำทางใน Android


187

ฉันทำตามคำแนะนำในการนำทางลิ้นชักการนำทางโดย Googleและฉันต้องการเพิ่มลงในกิจกรรมที่มีแท็บและท่าทาง

ฉันต้องการปิดการใช้งานท่าทางเพื่อเปิดลิ้นชักนำทางไม่มีใครมีความคิดใด ๆ ในการทำเช่นนี้?

คำตอบ:


438

คุณควรใช้:

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);

มันใช้งานได้สำหรับฉันการปัดเพื่อเปิดลิ้นชักถูกปิดใช้งาน

หากยังจะไม่ทำงานให้ตรวจสอบคำตอบที่ให้ไว้ที่นี่


1
คุณแน่ใจไหม? ฉันลอง แต่มันเปิด / ปิด diabled ทั้งคู่ ฉันทดสอบกับ android 2.3x กับเฟรมเวิร์กของ ActionBarSherlock
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 ของฉัน รูดลิ้นชัก ดังนั้นฉันควรปิดการใช้งาน 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); ล็อคทั้ง Drawer และ drawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END); เป็นตัวแทนของลิ้นชักที่คุณต้องการล็อคขอบคุณคนที่ทำงานให้ฉันและประหยัดเวลาของฉัน
Sanjeev Sangral

ในแหล่งที่มาปัจจุบันดูเหมือนว่า 3 สำหรับซ้ายและ 5 สำหรับขวาจะทำงานตามที่คาดไว้ แต่ GravityCompat.END ไม่ได้
ProjectJourneyman

6

หากต้องการปิดการใช้งานการกวาดให้แทนที่onInterceptTouchEventและonTouchEventเปิดDrawerLayoutและให้พวกเขาคืนค่าเท็จ


นี่คือคำตอบที่ถูกต้อง ขอผมอธิบายเพิ่มเติมในคำตอบอีกหน่อย
Martin Vysny

4

คำตอบสำหรับการปิดใช้งานการปัดเป็นคำตอบที่ถูกต้อง ฉันคิดว่า LOCK_MODE_LOCKED_CLOSED ทำงานใน Compat 24.x ได้ แต่ฟังก์ชั่นนี้ได้เปลี่ยนไปในไลบรารี่ compat ที่ใหม่กว่าและตอนนี้ LOCK_MODE_LOCKED_CLOSED ก็ป้องกันการแสดงเมนู nav อย่างสมบูรณ์แม้กระทั่งการใช้เมนูแฮมเบอร์เกอร์

คลาสต่อไปนี้เหมาะสำหรับฉัน (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)
  }
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.