2013-08-03 32 views
19

Tôi đang phát xung quanh với DrawerLayout và tôi đang gặp sự cố. Về cơ bản đôi khi khi tôi vuốt từ cạnh của màn hình, DrawerLayout sẽ bị kẹt cho đến khi tôi nhấc ngón tay ra khỏi màn hình (Xem ảnh chụp màn hình bên dưới)DrawerLayout bị kẹt khi vuốt

Tôi không chắc điều gì đang xảy ra, tôi đã theo mẫu mã từ google sdk chính xác. Bất kỳ ý tưởng?

Screenshot bug

Và đây là điều duy nhất tôi có trong FragmentActivity tôi:

@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final String[] names = 
       getResources().getStringArray(R.array.nav_names); 
     ArrayAdapter<String> adapter = 
       new ArrayAdapter<String>(
         getActionBar().getThemedContext(), 
         android.R.layout.simple_list_item_1, names); 

     final DrawerLayout drawer = 
       (DrawerLayout)findViewById(R.id.drawer_layout); 
     final ListView navList = 
       (ListView) findViewById(R.id.drawer); 
     navList.setAdapter(adapter); 
     navList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
     { 

      @Override 
      public void onItemClick(AdapterView<?> parent, 
            View view, final int pos, long id) 
      { 
       drawer.setDrawerListener(
         new DrawerLayout.SimpleDrawerListener() 
         { 
          @Override 
          public void onDrawerClosed(View drawerView) 
          { 
           super.onDrawerClosed(drawerView); 

          } 
         }); 
       drawer.closeDrawer(navList); 
      } 
     }); 

    } 
+2

Tôi nghĩ đó là lỗi. Tôi có cùng một lỗi với Gingerbread. Thử nghiệm trên Nexus 7 và tôi không thể tái tạo điều này. – vovahost

+0

Lạ. Tôi đang sử dụng phiên bản 4.2 – thunderousNinja

+1

bạn có chắc đó không phải là một tính năng? Doc: 'Nếu người dùng chạm vào cạnh trái của màn hình (trong vòng 20 dp từ bên trái), hãy để ngăn xem ra ngay sau khi ngón tay chạm vào màn hình. Điều này thúc đẩy phát hiện ngẫu nhiên và cung cấp phản hồi phong phú hơn.' – Zyoo

Trả lời

11

Lưu ý rằng bạn có thể làm được việc này 20dp tính năng ú bằng cách thiết lập thuộc tính nhấp vào để đúng vào FrameLayout trong DrawerLayout.

android: nhấp được = "true"

ví dụ: http://developer.android.com/training/implementing-navigation/nav-drawer.html

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true" /> 
    <!-- The navigation drawer --> 
    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="#111" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/darker_gray" 
     android:dividerHeight="1dp" /> 
</android.support.v4.widget.DrawerLayout> 
+3

Thật không may, điều này không có tác dụng đối với tôi. Tôi vẫn có thể tái tạo sự cố bị kẹt khi vuốt từ bên trái. –

+0

Điều này giải quyết được sự cố của tôi trên Android 4.4.4, OnePlus Một, phút API 17, API mục tiêu 21 – Barthy

0

Nếu bạn đã cho chúng ta thấy xml bố trí của bạn, chúng tôi có thể nhìn thấy nếu bạn có DrawerLayout như yếu tố ROOT . Và liệu hai đứa trẻ bên trong có Bố cục chính và Ngăn điều hướng hay không.

Theo Create a Drawer Layout:

Để thêm một ngăn kéo chuyển hướng, tuyên bố giao diện người dùng của bạn với một đối tượng DrawerLayout như quan điểm gốc của cách bố trí của bạn. Bên trong DrawerLayout, thêm một chế độ xem có chứa nội dung chính cho màn hình (bố cục chính của bạn khi ngăn được ẩn) và một chế độ xem khác có chứa nội dung của ngăn điều hướng.

+0

Wenza, hãy xem [sửa đổi] (http://stackoverflow.com/posts/32355754/revisions) để biết câu trả lời của bạn. Tôi đã phải đoán một chút về những gì bạn đang nói, vì vậy sửa nó nếu tôi có nó sai. Nhưng không sử dụng câu trả lời để đặt câu hỏi - làm việc để giành được đặc quyền đăng nhận xét. – Mogsdad

+0

Xin chào, câu trả lời là có drawerlayout là root và bên trong hai phần tử. Câu hỏi đã được bổ sung. – Wenza

0

tôi đã quản lý để làm việc xung quanh này bằng cách thực hiện DrawerListener này:

drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() { 
      @Override 
      public void onDrawerStateChanged(int newState) { 
       super.onDrawerStateChanged(newState); 
       if (drawerLayout.isDrawerVisible(Gravity.LEFT) && !drawerLayout.isDrawerOpen(Gravity.LEFT)) { 
        drawerLayout.closeDrawer(Gravity.LEFT); 
       } 
      } 
     }); 

Bất cứ khi nào thay đổi trạng thái, nếu ngăn kéo có thể nhìn thấy nhưng không mở, nó có nghĩa là nó 'nhìn trộm', vì vậy tôi đóng nó.

Các vấn đề liên quan