2013-06-07 33 views
31

Tôi đang sử dụng Ngăn điều hướng mới trong ứng dụng của mình. Nó là tuyệt vời, ngoại trừ tôi đã không tìm thấy một cách dễ dàng để thiết lập như thế nào ngăn kéo được mở. Hành vi mặc định là kéo từ cạnh trái của màn hình để mở. Điều này là tốt, trừ khi điện thoại/bàn có một trường hợp trên và các cạnh của điện thoại không thể được xúc động. Tôi muốn cho phép người dùng chạm và kéo từ lề màn hình sang bên trái. Điều này rất dễ cài đặt với các lib ngăn điều hướng khác (Trượt lib). Tôi đã không nhìn thấy bất cứ điều gì với lib của Google không may.Đặt lề lề cho Ngăn điều hướng Android

Có phương thức onTouchEvent() cho NavigationLayout có thể được sử dụng. Tất nhiên bạn có thể nghe tất cả các sự kiện liên lạc và kích hoạt một openDrawer, nhưng đã hy vọng cho một cách dễ dàng với ít mã. Bất kỳ ý tưởng?

+0

+1 Tôi cũng quan tâm đến việc tìm ra này. – bbedward

Trả lời

61

Ở đây tôi đã tìm thấy một giải pháp thông qua phản xạ

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
Field mDragger = mDrawerLayout.getClass().getDeclaredField(
     "mLeftDragger");//mRightDragger for right obviously 
mDragger.setAccessible(true); 
ViewDragHelper draggerObj = (ViewDragHelper) mDragger 
     .get(mDrawerLayout); 

Field mEdgeSize = draggerObj.getClass().getDeclaredField(
     "mEdgeSize"); 
mEdgeSize.setAccessible(true); 
int edge = mEdgeSize.getInt(draggerObj); 

mEdgeSize.setInt(draggerObj, edge * 5); //optimal value as for me, you may set any constant in dp 
+1

Hack không thực sự hoạt động đặc biệt khi nội dung của nó là ViewPager. Khi vuốt sang trái, với NavigationDrawer, ViewPager sẽ không thay đổi từ dạng xem 0 sang chế độ xem 1. Tất cả các sự kiện đều được NavigationDrawer tiêu thụ. –

+3

@CheokYanCheng Điều đó hiển nhiên. Bạn không thể có cả hai cách :) – Saket

+0

@Maxim: Tôi thử nghiệm với Android 5.0 và nó không hoạt động trơn tru. Khi trượt gần màn hình ở giữa, màn hình bên trái không thể di chuyển sang phải tất cả! – Phuong