7

İçeriği kaplayan saydam/saydam arka plana sahip bir araç çubuğum var. Bu nedenle, araç çubuğunun arkasında, tıklanabilir görünümler görünebilir. Sorun, araç çubuğunun tıklama olayını yakaladığı için araç çubuğundan tıklanamamasıdır.Araç Çubuğunun arkasındaki görünümler nasıl tıklanır?

Araç çubuğu için android:clickable="false", android:focusable="false" ve android:focusableInTouchMode="false" ayarlamayı denedim, ancak hiçbir etkisi yoktur. Araç çubuğunda bir tıklamayı temel görünüme nasıl gönderebilirim?

cevap

18

Toolbar'un uygulanmasına bir göz atın. , clickable özniteliğine bakılmaksızın, dokunma olayları yiyor.

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // Toolbars always eat touch events, but should still respect the touch event dispatch 
    // contract. If the normal View implementation doesn't want the events, we'll just silently 
    // eat the rest of the gesture without reporting the events to the default implementation 
    // since that's what it expects. 

    final int action = MotionEventCompat.getActionMasked(ev); 
    if (action == MotionEvent.ACTION_DOWN) { 
     mEatingTouch = false; 
    } 

    if (!mEatingTouch) { 
     final boolean handled = super.onTouchEvent(ev); 
     if (action == MotionEvent.ACTION_DOWN && !handled) { 
      mEatingTouch = true; 
     } 
    } 

    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { 
     mEatingTouch = false; 
    } 

    return true; 
} 

çözeltisi Toolbar uzanırlar ve onTouchEvent geçersiz etmektir.

public class NonClickableToolbar extends Toolbar { 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return false; 
    } 
} 
-7

Tasarımınızın ayarlanması gerekir. Şeffaf/saydam araç çubuğunun arkasında tıklanabilir görünümler sağlayamazsınız. Araç çubuğunun yüksekliğine eşit bir üst dolgu sağlamanız ve/veya araç çubuğu için hızlı dönüş modelini uygulamanız gerekir.

0

Araç Çubuğu, tüm tıklamaları tüketir. Daha önce bahsedilen @Matthias Robbens gibi Araç Çubuğu alt sınıfına ihtiyacınız var. Hala araç çubuğundaki bir tıklama dinleyici ayarlayın edebilmek istiyorsanız

, bunu kullanın:

/** Do not eat touch events, like super does. Instead map an ACTION_DOWN to a click on this 
* view. If no click listener is set (default), we do not consume the click */ 
@SuppressLint("ClickableViewAccessibility") 
@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_POINTER_DOWN){ 
     return performClick(); 
    } 

    return false; 
} 
İlgili konular