অন্যান্য অ্যাপ্লিকেশনগুলি (যেমন ফেসবুকের চ্যাট শিরোনামগুলি) আঁকতে কোন এপিআই ব্যবহার করা হয়?


226

কীভাবে ফেসবুক অ্যান্ড্রয়েডে চ্যাট হেডগুলি তৈরি করে? অন্যান্য সমস্ত দর্শনের শীর্ষে ভাসমান ভিউগুলি তৈরি করতে এপিআই কী?


6
এই অ্যাপ্লিকেশনটিতে "চ্যাট হেডস" play.google.com/store/apps/details?id=com.ninja.sms
অলি

11
আপনি যদি কোনও উদাহরণ সন্ধান করছেন, github.com/marshallino16/FloatingNotifications দেখুন
marshallino16

5
আপনি এখানে একটি ডেমো এবং একটি সাধারণ লাইব্রেরি পেতে পারেন: github.com/ericbhatti/floaties এই লাইব্রেরিটি ব্যবহার করে আপনি কেবল 2 লাইন ব্যবহার করে ভাসমান উইন্ডো তৈরি করতে পারেন।
এরিক বি।

উত্তর:


217

এই এক:

অ্যাপ্লিকেশনটিকে অন্যান্য সমস্ত অ্যাপ্লিকেশনগুলির উপরে প্রদর্শিত 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));

.. এবং এই পরিষেবাটি আপনার ম্যানিফেস্টে যুক্ত করুন।


4
আমার মনে হয় আরও অদ্ভুত জিনিস রয়েছে। "মাথা" এর বাইরে ইনপুট হ্যান্ডেল করার পাশাপাশি ড্রাগেবলি সম্পর্কে কী? আমি মনে করি আপনার এটিকে টেনে আনার সময় আপনার কমপক্ষে FLAG_NOT_TOUCH_MODAL এর পাশাপাশি উইন্ডো বৈশিষ্ট্যগুলি আপডেট করার জন্য কিছু চতুর যুক্তি (যেমন এটি সরানো) দরকার হবে।
ডিলিয়ান

2
কীভাবে চ্যাট-হেডগুলি সরিয়ে ফেলবেন?
নীরভ মেহতা

6
ভেবেছিলাম ভাসমান ইউআই তৈরির জন্য আমি যে এসডিকে তৈরি করেছি তা উল্লেখ করার মতো: www.tooleap.com
অ্যারিক

@ নীরভমেহেতা আপনি কি চ্যাট শিরোনামগুলি সরাতে সক্ষম?
KK_07k11A0585

কীভাবে আড্ডার মাথার মার্জিনটি সরিয়ে ফেলা যায়। উপরের কোড আউটপুটে কারণ বৃত্তটির সীমানা থেকে কিছু জায়গা রয়েছে Facebook ফেসবুকে বুদবুদের সেই স্থান নেই
ডিবাগার

51

একটি নিয়ম হিসাবে, অ্যান্ড্রয়েড ক্রিয়াকলাপগুলি পুরো পর্দা, ধারণাগতভাবে উত্সর্গীকৃত ইউআই যা সমস্ত ইন্টারঅ্যাকশন গ্রহণ করে take এর ব্যতিক্রম কিছু আছে। শুরু করার জন্য, এমন পপআপ ডায়লগ রয়েছে যা স্ক্রিনটি পূরণ করে না। আর একটি হ'ল অ্যান্ড্রয়েড টোস্ট, যা একটি ইন্টারঅ্যাক্টিভ পপআপ - আপনি এটি স্পর্শ করতে পারবেন না, এবং যদি চেষ্টা করেন তবে নীচে যা যা যাবেন to

আপনি নিজের বিশেষ ইউআইও করতে পারেন। WindowManagerকোনও ধরণের পতাকা নির্দিষ্ট করে আপনি সরাসরি দর্শন যোগ করতে পারেন । চ্যাট শিরোনাম সম্ভবত TYPE_PHONE ব্যবহার করে । কয়েকটি অনুরূপ ধরণের রয়েছে, তবে উদ্দেশ্যটি একই: বিশেষ উদ্দেশ্য ওভারলেগুলি যা প্যারেন্ট অ্যাপ্লিকেশনটি আপাতভাবে উপস্থিত না করে অন্য যে কোনও কিছুর শীর্ষে প্রদর্শিত হতে পারে।

পারস্পরিক মিথস্ক্রিয়ায় সমস্যার কারণে এটি কেবল আপনাকে এ পর্যন্ত পেয়ে যায়। প্রথমদিকে, আপনার ওভারলে সমস্ত ইন্টারঅ্যাকশন শোষণ করবে, তাই কেবল মাথাটি ইভেন্টগুলি পায় না তবে আপনি নীচের সমস্ত কিছুতে ইন্টারঅ্যাকশন অবরুদ্ধ করেন।

আপনি লেআউটপ্যারাম ব্যবহার করে এই আচরণটি কনফিগার করেন । FLAG_NOT_TOUCH_MODALএর অর্থ হ'ল আপনার প্রদর্শন ক্ষেত্রের বাইরের ইভেন্টগুলি অন্তর্নিহিত ইউআইগুলিতে যায়। আপনি এখন এটি কার্যকরভাবে দেখতে পাবেন তবে পিছনে / মেনু বোতামগুলির মতো অ্যাপ্লিকেশনগুলিতে নির্দেশিত হয় না, পাশাপাশি কোনও কীবোর্ডের মতো অন্যান্য খারাপ জিনিস এখনও ঘটে happen আপনার যে সমাধান প্রয়োজন FLAG_NOT_FOCUSABLE

আপনি অ-ফোকাসযোগ্য বিট থেকেও একটি পার্শ্ব প্রতিক্রিয়া পান যা আপনার ওভারলে এর সাথে কোনও দুর্দান্ত ইন্টারঅ্যাকশন নয়, যেমন বোতাম টিপুন। আপনি কিছু বেসিক স্পর্শ ইভেন্টগুলি পেতে পারেন, যা আপনি সর্বদা গণিত করতে পারেন, এবং এটি সম্ভবত চ্যাট প্রধানদের পক্ষে যথেষ্ট। কেবল সচেতন থাকুন যে এটি আপনাকে ইউআই অ্যানিমেশনের মতো প্রচুর পরিমাণে আপনার নিজের উপর ছেড়ে দেয়।

এই স্ট্যাকওভারফ্লো থ্রেডে নির্বাচক ইন্টারঅ্যাকশন গ্রহণের অনুমতি প্রদান সহ বিশদটির একটি ভাল ওভারভিউ পাওয়া যাবে । বিশেষত উত্তরের একটি লিঙ্ক শেষ পর্যন্ত আপনাকে এখানে নিয়ে যাবে , এটি একটি ভাল উদাহরণ প্রকল্প। নোট করুন আইসিএস কীভাবে এটি সামান্য কাজ করে তা পরিবর্তন করেছে তবে থ্রেডগুলি এটি ব্যাখ্যা করে।

এটি সমস্ত সর্বজনীন এপিআই উপাদান, তবে এটি অবশ্যই মূলধারার জিনিসটির মতো বলে মনে হচ্ছে না যা অবশ্যই অবশ্যই করা উচিত। ডকুমেন্টেশন বিশেষ সিস্টেম অ্যাপ ব্যবহারের রেফারেন্স এবং ভাল কারণ সহ ফাঁকা আছে; সবাই যদি তা করে?


আমি কি এই দর্শনগুলির জন্য কোনওভাবে ওরিয়েন্টেশন পরিবর্তনগুলি অবরুদ্ধ করতে পারি? যদি অন্তর্নিহিত ক্রিয়াকলাপটি ওরিয়েন্টেশনকে স্যুইচ করে, তবে আমার দৃষ্টিভঙ্গি তার ওরিয়েন্টেশনও পরিবর্তন করে।
এমজি

1
ওরিয়েন্টেশন পরিবর্তনটি কেবল ক্রিয়াকলাপের জন্য নয়, ডিভাইস-বিস্তৃত।
রব প্রধাম

7

স্প্রিংহেডগুলি বাক্সের বাইরে চ্যাট হেডগুলির বসন্ত ভিত্তিক আচরণ দেয়। আপনাকে যে সমস্ত সংজ্ঞা দিতে হবে তা হ'ল চ্যাট শিরোনামের জন্য আকর্ষণীয় এবং চ্যাটের শিরোনামটি ক্লিক করার পরে খণ্ডটি খোলার জন্য। চ্যাট মাথাগুলি যখন ছোট করা হয় তখন তা সঙ্কুচিত হয় এবং টেনে আনলে আঙুলটি অনুসরণ করুন।

প্রকল্পে একটি ডেমো অ্যাপ্লিকেশন অন্তর্ভুক্ত রয়েছে যা সমস্ত বিল্ট কার্যকারিতা দেখায়। এটি ব্যবহার করতে, আপনার এটিকে আপনার গ্রেড নির্ভরতাতে যুক্ত করতে হবে।

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

আরে @ কিরণকুমার, আপনি একটি খুব পরিষ্কার লাইব্রেরি তৈরি করেছেন .. আমি কেবল এটি পছন্দ করি .. আমি এই লাইব্রেরি থেকে বিভিন্ন দিক শেখার চেষ্টা করছি .. আমি এটিকে অ্যাপ্লিকেশন উইন্ডোর বাইরে চালানোর চেষ্টা করছি, একরকমভাবে আমি কিছুটা সফল হয়েছি তাই .. তবে সমস্যাটি দেখা দেয় যখন আমি অ্যাপ্লিকেশনটির উইন্ডোর বাইরে চ্যাট হেডটিতে ক্লিক করি .. খণ্ডটি জাভা.লং.আউটআউট মেমরিরির খুলতে এবং ফিরতে সক্ষম হবে না .. যদি এটি আপনার পাশ থেকে সম্ভব হয় তবে আমাকে এর মধ্য দিয়ে কিছু দিন .. এটি আনন্দের সাথে সম্মানিত হবে ..
অ্যারেস্ট্যাক

@ অ্যারেস্ট্যাক এখন আপনি এটি কোনও পরিষেবাতে চালাতে পারেন। গিটহাব রেপোতে শাখাগুলি থাকলে তালিকাটি দেখুন
কিরণ কুমার

@ কিরণকুমার আপনাকে ধন্যবাদ, নতুন লিবের সাথে সমস্যা হচ্ছে মার্শমেলো সংস্করণে ড্র ওভার অ্যাপ্লিকেশনটির অনুমতি
অ্যারেস্ট্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.