android एंड्रॉइड में कौन सी एपीआई चैट हेड बनाने के लिए फेसबुक का उपयोग कर रही है?




facebook android-windowmanager (3)

एंड्रॉइड पर फेसबुक चैट हेड कैसे बनाते हैं? अन्य सभी विचारों के शीर्ष पर फ़्लोटिंग दृश्य बनाने के लिए एपीआई क्या है?


वसंत के सिर बॉक्स के बाहर चैट हेड के वसंत आधारित व्यवहार देता है। आपको चैट हेड के क्लिक करने के बाद चैट हेड के लिए ड्रायबल और खुलने के लिए सभी को परिभाषित करना होगा। ड्रैग किए जाने पर उंगली और उंगली का पालन करते समय बातचीत के सिर गिर जाते हैं।

इस परियोजना में एक डेमो ऐप शामिल है जो सभी अंतर्निहित कार्यक्षमता को प्रदर्शित करता है। इसका उपयोग करने के लिए, आपको इसे अपने ग्रेडल निर्भरताओं में जोड़ना होगा।

compile 'com.flipkart.springyheads:library:0.9.6'

This एक:

एप्लिकेशन को अन्य सभी अनुप्रयोगों के शीर्ष पर दिखाए गए प्रकार 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));

.. और इस सेवा को अपने मैनिफेस्ट में जोड़ें।


एक नियम के रूप में, एंड्रॉइड गतिविधियां पूर्ण स्क्रीन हैं, अवधारणात्मक रूप से समर्पित यूआई जो सभी बातचीत लेती हैं। इसमें कुछ अपवाद हैं। शुरुआत के लिए, पॉपअप संवाद हैं जो स्क्रीन को भरते नहीं हैं। एक और एंड्रॉइड टोस्ट है, जो एक गैर-इंटरैक्टिव पॉपअप है - आप इसे छू नहीं सकते हैं, और यदि आप कोशिश करते हैं तो यह नीचे जो कुछ भी होगा, उसके पास जाएगा।

आप अपने स्वयं के विशेष यूआई भी कर सकते हैं। आप एक प्रकार का ध्वज निर्दिष्ट करते हुए सीधे WindowManager विचार जोड़ सकते हैं। चैट हेड्स शायद TYPE_PHONE का उपयोग करता है। कुछ समान प्रकार हैं, लेकिन उद्देश्य वही है: विशेष उद्देश्य ओवरले जो माता-पिता के आवेदन के बिना किसी और चीज के शीर्ष पर दिखाई दे सकते हैं।

हालांकि, आपको केवल इतना ही मिलता है, हालांकि, बातचीत के साथ समस्याओं की वजह से। सबसे पहले, आपका ओवरले सभी इंटरैक्शन को अवशोषित कर देगा, इसलिए न केवल सिर को घटनाएं मिलती हैं, बल्कि आप नीचे सबकुछ पर बातचीत को अवरुद्ध करते हैं।

आप LayoutParams का उपयोग करके इस व्यवहार को कॉन्फ़िगर करते हैं। FLAG_NOT_TOUCH_MODAL अर्थ है कि आपके प्रदर्शन क्षेत्र के बाहर की घटनाएं अंतर्निहित यूआई पर जाती हैं। अब आप इसे काम करेंगे, लेकिन अन्य बुरी चीजें अभी भी होती हैं, जैसे बैक / मेनू बटन ऐप्स पर निर्देशित नहीं होते हैं, साथ ही कोई कीबोर्ड नहीं। हल करने के लिए आपको FLAG_NOT_FOCUSABLE आवश्यकता है।

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

चुनिंदा बातचीत खपत के लिए अनुमति सहित विस्तार का एक अच्छा अवलोकन, इस स्टैक ओवरफ्लो थ्रेड में पाया जा सकता है। विशेष रूप से उत्तर लिंक में से एक अंततः आपको here ले जाएगा, जो एक अच्छा उदाहरण प्रोजेक्ट है। ध्यान दें कि आईसीएस बदल गया है कि यह कैसे काम करता है, लेकिन धागे इसे समझाते हैं।

यह सभी सार्वजनिक एपीआई सामान है, लेकिन यह वास्तव में मुख्यधारा की तरह नहीं लगता है कि किसी को निश्चित रूप से एक मामले के रूप में करना चाहिए। दस्तावेज विशेष सिस्टम ऐप व्यवहार के संदर्भों से भरा हुआ है, और अच्छे कारण के साथ; क्या होगा यदि हर कोई ऐसा करता?





android-windowmanager