2012-04-24 9 views
7

मैं एक कस्टम व्यू के साथ टोस्ट का उपयोग कर रहा हूं। मैं दृश्य को तुरंत चालू करता हूं और टोस्ट पर सेट व्यू को कॉल करता हूं। टोस्ट को शीर्ष पर तैरना था और फोकस और स्पर्श घटनाओं को प्राप्त नहीं किया गया था, और यह अच्छी तरह से काम करता था। ऐप लॉन्च होने के बाद, उपयोगकर्ताओं ने शिकायत की कि गैलेक्सी नोट जैसे कुछ फोन मॉडल पर टोस्ट को टच इवेंट मिल गया था और इसके नीचे ऐप नहीं था।एंड्रॉइड टोस्ट्स कुछ फोन पर टच इवेंट प्राप्त करते हैं, न कि दूसरों पर

मैंने लेआउट पैराम्स झंडे (WindowManager.LayoutParams) मुद्रित किया है कि दृश्य विधि सेटआउटआउट में मिलता है। यह पता चला है कि अधिकांश उपकरणों पर, मान 0x000098 है, लेकिन कुछ पर यह 0x040088 है। टोस्ट को टच इवेंट प्राप्त करने वाले उपकरणों पर, ध्वज FLAG_NOT_TOUCHABLE हटा दिया जाता है, और ध्वज FLAG_WATCH_OUTSIDE_TOUCH जोड़ा जाता है। यह बताता है कि टोस्ट को टच इवेंट क्यों मिलते हैं।

लेकिन इस अंतर का कारण क्या है? टोस्ट को स्पर्श करने के लिए मजबूर करने का कोई तरीका नहीं है?

+0

क्या आपको कोई जवाब मिला? इसके अलावा, आपने टोस्ट पैरा कैसे पढ़ा? – theJosh

+0

"toast.getView()। SetEnabled (false);" तुम्हारे लिए काम कर रहा है? इसे टोस्ट के दृश्य पर स्पर्श घटनाओं को अक्षम करना चाहिए। – domi

+0

यह सवाल 2 साल का है और अचानक जीवन में वापस आ गया। मेरे पास इस समय परीक्षण करने के लिए कोई डिवाइस नहीं है – yoah

उत्तर

1

मेरे पास एक काम है। आपको उस दृश्य तक पहुंच की आवश्यकता है जिसे टोस्ट कवर किया जा रहा है। आप मूल रूप से टोस्ट पर जाने वाली स्पर्श घटनाओं को पकड़ सकते हैं। फिर मोशनवेन्ट एक्स और वाई बदलें। फिर मोशनवेन्ट को उस दृश्य में भेजें जो अस्पष्ट है। यह मेरे लिए थोड़ा हैकी लगता है, लेकिन यह काम करता है। मुझे लगता है कि टोस्ट पर झंडे को बदलना बेहतर होगा लेकिन मैं उन्हें नहीं ढूंढ सकता।

गतिविधि में द टोस्ट बनाता है: मैं इसे यहाँ पसंद करेंगे किसी को भी एक बेहतर तरीका है

final Taost toast = Toast.makeText(this, "Text", Toast.LENGTH_LONG); 
final View myCoveredView = findViewById(R.id.my_covered_view); 
final View toastView = toast.getView(); 

toastView.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(final View v2, final MotionEvent event) { 
        //Make sure the view is accessible 
        if(myCoveredView != null){ 
         //Set the touch location to the absolute screen location 
         event.setLocation(event.getRawX(), event.getRawY()); 
         //Send the touch event to the view 
         return myCoveredView.onTouchEvent(event); 
        } 
        return false; 
       } 
      }); 

हैं।

+0

मेरे मामले के लिए यह अच्छा नहीं है क्योंकि नीचे दिया गया दृश्य एक और ऐप है। आप टोस्ट के दृश्य को पाने, खिड़की ढूंढने और खिड़कियों के झंडे को बदलने की कोशिश कर सकते हैं। मुझे यकीन नहीं है कि क्या इन झंडे को – yoah

+0

बदल दिया जा सकता है Google जीमेल में "पूर्ववत करें" बटन जोड़ने के लिए सामान्य टोस्ट के स्थान पर एक कस्टम दृश्य का उपयोग करता है। अधिक जानकारी के लिए [यह SO सवाल] देखें (http://stackoverflow.com/questions/9575520/how-can-i-include-a-button-in-a-toast-notification)। – sonictt1

संबंधित मुद्दे