2013-08-03 19 views
19

DrawerLayout ile uğraşıyorum ve bir sorunla karşılaşıyorum. Temelde bazen ekranın kenarından kaydırdığımda, parmağımı ekrandan kaldırıncaya kadar DrawerLayout sıkışır (aşağıdaki ekran görüntüsüne bakın)DrawerLayout tokatlamak için takılıyor

Neyin arttığından emin değilim, google sdk kod örneğini takip ettim kesinlikle. Herhangi bir fikir?

Screenshot bug

Ve burada benim FragmentActivity içinde gereken tek şey:

bu sorunun üstesinden gelebilirsiniz
@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

Bence bu bir hatadır. Gingerbread'la aynı hatayı aldım. Nexus 7'de test edildi ve bunu yeniden oluşturamadım. – vovahost

+0

Garip. Sürüm 4.2 – thunderousNinja

+1

'dayım, bir özellik olmadığından emin misin? Doc: 'Eğer kullanıcı ekranın sol köşesine dokunduğunda (soldan 20 dp dahilinde), parmağınız ekranla temas ettiğinde çekmeceyi gözetleyin. Bu, yanlışlıkla keşif yapılmasını destekler ve daha zengin geri bildirimler sağlar. ' – Zyoo

cevap

11

Not dahilinde FrameLayout üzerinde true tıklanabilir özelliğini ayarlayarak gözetleme özelliğini 20dp DrawerLayout.

android: tıklanabilir = "true"

örneğin

: Bize düzen xml göstermişti Eğer KÖK unsuru olarak DrawerLayout varsa 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

destek kitaplığında hala mevcut, ancak bu benim için çalışmıyor. Soldan kaydırmaya takılıp kalmama sorununu yeniden üretebiliyorum. –

+0

Bu, Android 4.4'teki sorunumu çözdü.4, OnePlus One, min API 17, hedef API 21 – Barthy

0

, biz görebiliyordu . Ve içerideki iki çocuğun Ana Düzen ve Gezinme Çekmecesi olup olmadığı. Create a Drawer Layout göre

:

, bir navigasyon aygıtı ekleyin Düzeninize kök görünüm olarak bir DrawerLayout nesnesi ile kullanıcı arabirim tanımlamak için. DrawerLayout içinde, ekranın ana içeriğini (çekmece gizlendiğinde birincil düzeninizi) ve gezinme çekmecesinin içeriğini içeren başka bir görünümü içeren bir görünüm ekleyin.

+0

Wenza, cevabınıza [revizyonlar] (http://stackoverflow.com/posts/32355754/revisions) bir göz atın. Söylediklerinize biraz karar vermeliydim, eğer yanlışsa düzeltin. Ancak soru sormak için cevap kullanmayın - yorum yayınlama ayrıcalığını kazanmaya çalışın. – Mogsdad

+0

Merhaba, cevabın kök olarak ve iki öğenin içinde çekmece olması gerekiyordu. Soru ek oldu. – Wenza

0

Bu DrawerListener uygulayarak bu geçici bir çözüm başardınız: Çekmece görünür ama açık değilse

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

durum değişiklikleri, bunun 'Bakmak' demektir olduğunda, bu yüzden kapatmak o.

İlgili konular