2012-05-06 16 views
7

Uygulamamın altında bir ListView ve altında bir EditText vardır. Bazı nedenlerden dolayı, SEKME tuşu onKeyListener'u tetiklemez. Ben (DEL, ENTER, DPAD_UP/AŞAĞI/MERKEZİ) ele alıyorum tüm diğer anahtarlar sadece iyi alınır. dispatchKeyEvent'da bir kesme noktası ekledim, yine TAB olaylarını alma şansım olmadı.EditText alma TAB önemli olayları - Stok yumuşak vk

Uygulamamın daha önce metni görüntülemek için büyük bir TextView vardı ve bu süre zarfında TAB olayları iyi alındı. ListView şimdi TextView'un yerini almıştır.

TAB olayının neden alınmadığı konusunda tamamen mistified oldum. Bu 2.3.6 ile ICS 4.0.4 & stok N1, çalışan bir stok Xoom, üzerindedir.

Geçerli kodumu, bir TextView kullanarak sürümle karşılaştırdım ve kodun çoğu, TextView'un yerinde bulunan ListView'u işlemek içindir. nextFocusLeft ve nextFocusRight özniteliklerinden ayrı olarak EditText için başka hiçbir şey değişmedi.

Düzenleme: Sadece Go Keyboard ve Hacker's Klavyesi ile denedim ve SEKME iyi alındı. Görünüşe göre bu, bazı sanal klavyelerle

cevap

0

Sanırım sorunu görebiliyorum. ListView.java kaynağına bakarak, bir liste öğesi içinde odağı değiştiren önemli olayları tüketen bir mekanizma vardır. Bu yöntemden önceki yorumlara ve yöntemin ortasındaki yorum bloğuna bakın.

/** 
* To avoid horizontal focus searches changing the selected item, we 
* manually focus search within the selected item (as applicable), and 
* prevent focus from jumping to something within another item. 
* @param direction one of {View.FOCUS_LEFT, View.FOCUS_RIGHT} 
* @return Whether this consumes the key event. 
*/ 
private boolean handleHorizontalFocusWithinListItem(int direction) { 
    if (direction != View.FOCUS_LEFT && direction != View.FOCUS_RIGHT) { 
     throw new IllegalArgumentException("direction must be one of" 
       + " {View.FOCUS_LEFT, View.FOCUS_RIGHT}"); 
    } 

    final int numChildren = getChildCount(); 
    if (mItemsCanFocus && numChildren > 0 && mSelectedPosition != INVALID_POSITION) { 
     final View selectedView = getSelectedView(); 
     if (selectedView != null && selectedView.hasFocus() && 
       selectedView instanceof ViewGroup) { 

      final View currentFocus = selectedView.findFocus(); 
      final View nextFocus = FocusFinder.getInstance().findNextFocus(
        (ViewGroup) selectedView, currentFocus, direction); 
      if (nextFocus != null) { 
       // do the math to get interesting rect in next focus' coordinates 
       currentFocus.getFocusedRect(mTempRect); 
       offsetDescendantRectToMyCoords(currentFocus, mTempRect); 
       offsetRectIntoDescendantCoords(nextFocus, mTempRect); 
       if (nextFocus.requestFocus(direction, mTempRect)) { 
        return true; 
       } 
      } 
      // we are blocking the key from being handled (by returning true) 
      // if the global result is going to be some other view within this 
      // list. this is to acheive the overall goal of having 
      // horizontal d-pad navigation remain in the current item. 
      final View globalNextFocus = FocusFinder.getInstance().findNextFocus(
        (ViewGroup) getRootView(), currentFocus, direction); 
      if (globalNextFocus != null) { 
       return isViewAncestorOf(globalNextFocus, this); 
      } 
     } 
    } 
    return false; 
} 

Tek bir liste öğesi içinde birden fazla odaklanabilir öğe var mı? Eğer öyleyse, bu kod sekme tuşunu tüketir. Durum buysa, bazı öğelerin odaklanamayacağını veya başka bir tasarım seçeneğini düşünmesini isteyebilirsiniz.

+0

Bunu test etmek için bir test projesi oluşturdum ve maalesef işe yaramadı. Edittext her zaman odaklıdır, bu yüzden her zaman keyevent almalıdır, ya da en azından dispatchKeyEvent içinde yakalanmalıdır. Bu Hackers Klavye ile iyi çalışıyor ama hisse senedi bir değil. Test projesini buraya yükledim http://dl.dropbox.com/u/78755665/Test.zip Her şey, –

+0

liste görünümünde odaklanamayacak şekilde ayarlanmıştır, çift kontrol ettim, kesinlikle doğru dosya. –

+0

Samsung Galaxy SII Epic 4G cihazımda çalıştırdığımda, yumuşak klavyede bir sekme tuşu bile gösterilmiyor. –

İlgili konular