2013-08-03 15 views
19

Ich spiele mit DrawerLayout herum und stoße auf ein Problem. Grundsätzlich manchmal, wenn ich vom Rand des Bildschirms streichen wird das DrawerLayout stecken bleiben, bis ich meinen Finger vom Bildschirm heben (siehe Screenshot unten)DrawerLayout beim Wischen stecken bleiben

Ich bin mir nicht sicher, was geht, ich folgte dem Codebeispiel von Google Sdk genau. Irgendwelche Ideen?

Screenshot bug

Und hier ist das einzige, was ich in meinem FragmentActivity haben:

@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

Ich denke, es ist ein Fehler. Ich habe den gleichen Fehler mit Lebkuchen. Getestet auf Nexus 7 und ich konnte das nicht reproduzieren. – vovahost

+0

Seltsam. Ich bin auf Version 4.2 – thunderousNinja

+1

Sind Sie sicher, dass es keine Funktion ist? Doc: 'Wenn der Benutzer den linken Rand des Bildschirms berührt (innerhalb von 20 dp von links), lassen Sie die Schublade herausschauen, sobald der Finger den Bildschirm berührt. Dies fördert versehentliche Entdeckung und bietet reichhaltigeres Feedback. – Zyoo

Antwort

11

Beachten Sie, dass Sie dieses Problem umgehen können 20DP Peek-Funktion durch den klickbaren Attribut auf true auf der FrameLayout Einstellung innerhalb der SchubladenLayout.

android: anklickbare = "true"

zum Beispiel: 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

Leider funktioniert das nicht für mich. Ich bin immer noch in der Lage, das Problem des Wischens von links zu reproduzieren. –

+0

Das hat mein Problem auf Android 4.4 gelöst.4, OnePlus One, min API 17, Ziel API 21 – Barthy

0

Wenn Sie uns Ihr Layout xml gezeigt hatten, konnten wir sehen, ob Sie DrawerLayout als Root-Element haben . Und ob die inneren zwei Kinder Hauptlayout und Navigationsschublade sind.

Nach Create a Drawer Layout:

eine Navigationsleiste hinzuzufügen, erklärt Ihre Benutzeroberfläche mit einem DrawerLayout Objekt als Stammansicht des Layouts. Fügen Sie im DrawerLayout eine Ansicht hinzu, die den Hauptinhalt des Bildschirms enthält (Ihr primäres Layout, wenn die Schublade ausgeblendet ist) und eine weitere Ansicht, die den Inhalt der Navigationsleiste enthält.

+0

Wenza, schauen Sie sich die [revisions] (http://stackoverflow.com/posts/32355754/revisions) für Ihre Antwort an. Ich musste ein bisschen raten, was du gesagt hast, also korrigiere es, wenn ich falsch liege. Aber benutze keine Antworten, um Fragen zu stellen - arbeite daran, das Privileg zu erhalten, Kommentare zu schreiben. – Mogsdad

+0

Hallo, die Antwort war, Drawinglayout als root und drinnen zwei Elemente zu haben. Die Frage war zusätzlich. – Wenza

0

Ich habe es geschafft, durch Umsetzung dieser DrawerListener, dies zu umgehen:

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); 
       } 
      } 
     }); 

Jedes Mal, wenn sich der Zustand ändert, wenn die Schublade sichtbar ist, aber nicht offen, es bedeutet, dass es ‚spähen‘, so dass ich in der Nähe es.

Verwandte Themen