7

मेरे पास एक पारदर्शी/पारदर्शी पृष्ठभूमि वाला टूलबार है जो सामग्री को ओवरले करता है। तो, टूलबार के पीछे, दृश्य दिखाई दे सकते हैं जो क्लिक करने योग्य हैं। समस्या यह है कि उन्हें टूलबार के माध्यम से क्लिक नहीं किया जा सकता क्योंकि टूलबार क्लिक ईवेंट को पकड़ रहा है।टूलबार के पीछे विचार कैसे क्लिक करें?

मैंने टूलबार के लिए android:clickable="false", android:focusable="false" और android:focusableInTouchMode="false" सेट करने का प्रयास किया, लेकिन इसका कोई प्रभाव नहीं पड़ा। मैं अंतर्निहित दृश्य में टूलबार के माध्यम से एक क्लिक कैसे भेज सकता हूं?

उत्तर

18

Toolbar के कार्यान्वयन पर एक नज़र डालें। यह विशेषता के बावजूद, स्पर्श घटनाओं खाता है।

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

समाधान Toolbar से विस्तार करने और onTouchEvent ओवरराइड करने के लिए है।

public class NonClickableToolbar extends Toolbar { 

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

आपका डिजाइन को समायोजित करने की जरूरत है। आप पारदर्शी/पारदर्शी टूलबार के पीछे क्लिक करने योग्य दृश्य प्रदान नहीं कर सकते हैं। आपको टूलबार की ऊंचाई के बराबर एक शीर्ष पैडिंग प्रदान करना होगा और/या टूलबार के लिए त्वरित वापसी पैटर्न लागू करना होगा।

0

टूलबार सभी क्लिकों का उपभोग करता है। आपको टूलबार उप-वर्ग की आवश्यकता है, जैसे @Matthias Robbens पहले से ही उल्लेख किया गया है।

आप अभी भी उपकरण पट्टी पर एक क्लिक श्रोता सेट करने में सक्षम होना चाहते हैं, इस का उपयोग करें:

/** 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; 
} 
संबंधित मुद्दे