7

Ho una barra degli strumenti con uno sfondo trasparente/traslucido che si sovrappone al contenuto. Quindi, dietro la barra degli strumenti, possono apparire le visualizzazioni che sono cliccabili. Il problema è che non è possibile fare clic sulla barra degli strumenti perché la barra degli strumenti sta catturando l'evento click.Come fare clic sulle visualizzazioni dietro una barra degli strumenti?

Ho provato a impostare android:clickable="false", android:focusable="false" e android:focusableInTouchMode="false" per la barra degli strumenti, ma non ha alcun effetto. Come posso inviare un clic sulla barra degli strumenti alla vista sottostante?

risposta

18

Dai un'occhiata all'implementazione di Toolbar. È mangia eventi di tocco, indipendentemente dall'attributo clickable.

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

La soluzione è quella di estendere da Toolbar e override onTouchEvent.

public class NonClickableToolbar extends Toolbar { 

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

Il disegno deve essere regolato. Non è possibile fornire viste cliccabili dietro una barra degli strumenti trasparente/traslucida. È necessario fornire un riempimento superiore uguale all'altezza della barra degli strumenti e/o implementare il modello di ritorno rapido per la barra degli strumenti.

0

La barra degli strumenti consuma tutti i clic. Devi sottoclasse Toolbar, come @Matthias Robbens già menzionato.

Se si vuole ancora essere in grado di impostare un clic ascoltatore sulla barra degli strumenti, utilizzare questo:

/** 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; 
} 
Problemi correlati