फेसबुक Android पर चैट हेड कैसे बनाता है? अन्य सभी दृश्यों के शीर्ष पर अस्थायी दृश्य बनाने के लिए एपीआई क्या है?
फेसबुक Android पर चैट हेड कैसे बनाता है? अन्य सभी दृश्यों के शीर्ष पर अस्थायी दृश्य बनाने के लिए एपीआई क्या है?
जवाबों:
यह एक:
किसी एप्लिकेशन को अन्य सभी एप्लिकेशन के शीर्ष पर दिखाए गए प्रकार TYPE_SYSTEM_ALERT का उपयोग करके खिड़कियां खोलने की अनुमति देता है। बहुत कम अनुप्रयोगों को इस अनुमति का उपयोग करना चाहिए; ये विंडो उपयोगकर्ता के साथ सिस्टम-स्तरीय इंटरैक्शन के लिए अभिप्रेत हैं।
लगातार मान: "android.permission.SYSTEM_ALERT_WINDOW"
// संपादित करें: पूर्ण कोड यहाँ :
public class ChatHeadService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
@Override public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.android_head);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
}
किसी भी तरह सेवा शुरू करने के लिए मत भूलना:
startService(new Intent(context, ChatHeadService.class));
.. और इस सेवा को अपने घोषणापत्र में जोड़ें।
एक नियम के रूप में, एंड्रॉइड गतिविधियां पूर्ण स्क्रीन हैं, वैचारिक रूप से समर्पित UI हैं जो सभी इंटरैक्शन लेते हैं। इसके कुछ अपवाद हैं। एक शुरुआत के लिए, पॉपअप संवाद हैं जो स्क्रीन को नहीं भरते हैं। एक और एंड्रॉइड टोस्ट है, जो एक गैर-इंटरैक्टिव पॉपअप है - आप इसे छू नहीं सकते हैं, और यदि आप कोशिश करते हैं तो यह जो भी है उसके नीचे जाएगा।
आप अपने स्वयं के विशेष UI भी कर सकते हैं। आप WindowManager
किसी प्रकार के ध्वज को निर्दिष्ट करते हुए सीधे दृश्य जोड़ सकते हैं । चैट प्रमुख शायद TYPE_PHONE का उपयोग करते हैं । कुछ समान प्रकार हैं, लेकिन उद्देश्य समान है: विशेष उद्देश्य ओवरले जो मूल आवेदन के बिना किसी अन्य चीज़ के शीर्ष पर प्रकट हो सकता है, जाहिरा तौर पर मौजूद नहीं है।
यह केवल आपको अभी तक प्राप्त होता है, हालांकि, बातचीत के साथ समस्याओं के कारण। सबसे पहले, आपका ओवरले सभी इंटरैक्शन को अवशोषित करेगा, इसलिए न केवल सिर को घटनाएँ मिलती हैं, बल्कि आप सब कुछ के लिए बातचीत को अवरुद्ध करते हैं।
आप इस व्यवहार को लेआउटपार्म्स का उपयोग करके कॉन्फ़िगर करते हैं । FLAG_NOT_TOUCH_MODAL
इसका मतलब है कि आपके प्रदर्शन क्षेत्र के बाहर की घटनाएं अंतर्निहित UI पर जाती हैं। अब आप इसे काम कर पाएंगे, लेकिन अन्य बुरी चीजें अभी भी होती हैं, जैसे कि बैक / मेनू बटन को ऐप्स से निर्देशित नहीं किया जाता है, साथ ही कोई कीबोर्ड नहीं। हल करने के लिए कि आप की आवश्यकता FLAG_NOT_FOCUSABLE
।
आपको गैर-फ़ोकस करने योग्य बिट से भी साइड इफ़ेक्ट मिलता है, जो आपके ओवरले के साथ कोई भी अच्छा तालमेल नहीं है, जैसे बटन प्रेस। आप कुछ बुनियादी स्पर्श घटनाओं को प्राप्त कर सकते हैं, हालांकि, आप हमेशा गणित कर सकते हैं, और यह संभवत: चैट प्रमुखों के लिए पर्याप्त है। बस इस बात से अवगत रहें कि यह आपको यूआई एनीमेशन जैसे क्षेत्रों में अपने दम पर छोड़ देता है।
विस्तार का एक अच्छा अवलोकन, चयनात्मक बातचीत की खपत के लिए अनुमति सहित, इस StackOverflow धागे में पाया जा सकता है । विशेष रूप से उत्तर लिंक में से एक अंततः आपको यहां ले जाएगा , जो एक अच्छा उदाहरण परियोजना है। ध्यान दें कि आईसीएस बदल गया है कि यह कैसे थोड़ा काम करता है, लेकिन थ्रेड्स बताते हैं कि।
यह सब सार्वजनिक एपीआई सामान है, लेकिन यह वास्तव में एक मुख्यधारा की चीज की तरह प्रतीत नहीं होता है कि किसी को पाठ्यक्रम के रूप में क्या करना चाहिए। दस्तावेज़ीकरण विशेष प्रणाली ऐप व्यवहार के संदर्भ में और अच्छे कारण के साथ अटे पड़े हैं; अगर सबने किया तो क्या होगा?
लचीली सिर बॉक्स से बाहर चैट सिर के वसंत आधारित व्यवहार देता है। आपको केवल यह बताना है कि चैट हेड के लिए ड्रॉबल है और चैट हेड पर क्लिक करते ही खुलने वाला टुकड़ा। घसीटते समय चैट हेड्स कम हो जाते हैं और उंगली का अनुसरण करते हैं।
परियोजना में एक डेमो ऐप शामिल है जो सभी अंतर्निहित कार्यक्षमता का प्रदर्शन करता है। इसका उपयोग करने के लिए, आपको इसे अपने ग्रेडेल निर्भरताओं में जोड़ना होगा।
compile 'com.flipkart.springyheads:library:0.9.6'