ساخت Widget شناور در اندروید

ساخت Widget شناور در اندروید

سلام دوستان؛

قبلا در مورد ساخت ویجت (Widget) بحث کرده ایم، پس باتوجه به اینکه شما قبلا آن آموزش را مطالعه کرده اید به سراغ آموزش ساخت ویجت شناور(floating widget) میپردازیم. ویجت شناور(Widget) در حقیقت viewهایی هستند که برروی صفحه نمایش شناور است. این ویجت(Widget) که برروی صفحه قرار خواهد گرفت میتواند در استفاده از چند برنامه و کنترل راحت تر آنها به شما کمک کند. این بدان معنی است که مثلا اگر شما در ماشین حساب باشید و یک نرم افزار پخش موسیقی دارای این قابلیت داشته باشد، همزمان میتوانید در ماشین حساب آهنگ های خود را کنترل کنید.

در این آموزش ما یاد میگیریم که چگونه یک ویجت شناور (Widget) ساده بسازیم تا کاربر به راحتی بتواند موقعیت آن را در صفحه با حرکتش تعیین کند. ما در این آموزش یک ویجت شناور (Widget) به همراه دکمه میسازیم تا پخش موسیقی را کنترل کنیم.

پیش نمایش نهایی:

android floating widget mobcollege
۱- ساخت یک پروژه جدید برای ویجت شناور (Widget)

۱- یک پروژه جدید ایجاد کنید.

۲- این منابع را دانلود کنید و آنها را به پوشه res خود اضافه کنید. این پوشه شامل تمام آیکون های لازم و تصاویر مورد نیاز برای این برنامه است.

۳.مجوز android.permission.SYSTEM_ALERT_WINDOW را در فایل  AndroidManifest.xml قرار دهید. این مجوز به شما اجازه می دهد که بتوانید پنجره ای را برروی برنامه ای دیگر اجرا کنید. همچنین یک سرویس به نام FloatingViewService که در مدت کوتاهی ایجاد خواهد شد را قرار دهید.

۴- یک فایل layout به نام layout_floating_widget.xml برای ویجت شناور (Widget) بسازید. این layout شامل دو view اصلی است.

Collapsed view:

   ویجت شناور (Widget) هنگامی که برنامه اجرا خواهد شد باقی می ماند. هنگامی که کاربر برروی View کلیک کرد، به طور کامل باز میگردد.

Expanded View:

این View، شامل دکمه برای پخش آهنگ، تغییر آهنگ قبل/بعد و باز کردن نرم افزار است.

۲-۱ اضافه کردن ویجت شناور (Widget) و مدیریت جابجایی

اکنون یک سرویس(service) به نام FloatingViewService.java ایجاد کنید. هر زمان که ویجت شناور (Widget) را نمایش میدهید، سرویس با استفاده از دستور ()startService اجرا خواهد شد.

در ()onCreate مربوط به سرویس، ما فایل Layout مربوط به ویجت شناور را در سمت بالا و گوشه قرار می دهیم.

همچنین ما ()OnClickListner را برای تمام دکمه ها مانند پخش، مکث و باز کردن نرم افزار پیاده سازی می کنیم. شما می توانید یک تابع برای پخش یا مکث در آهنگ پیاده سازی کنید. زمانی که کاربر دکمه بستن را فشار می دهد،FloatingViewService متوقف میشود و ویجت شناور (Widget) سلسله مراتب نمایش حذف خواهد شد.

کدهای زیر را در متد ()onCrate مربوط به فایل FloatingViewService.java قرار دهید.

برای جابه جایی View همراه با لمس، ما باید ()OnTouchListener را پیاده سازی کنیم. هرزمان که کاربر view اصلی را لمس کند ما باید موقعیت X و Y را به مختصات جدید X و Y تغییر بدهیم.

۲-۲ مدیریت ویجت Collapsing / Expanding

هنگامی که کاربر ویجت را می بندد نمایش مربوط به View باید به حالت نمایش View.GONE تغیر حالت بدهد. مانند زیر:

android floating widget mobcollege
برای رسیدن به این هدف ما نیاز به اجرای ()OnClickListner به imageview داریم. اما همانطور که ()OnTouchListener را برای view اصلی پیاده سازی کرده ایم،()OnClickListner کار نخواهد کرد. بنابراین برای شناسایی کلیک ما از MotionEvent.ACTION_MOVE در  ()OnTouchListener به صورت زیر استفاده خواهیم کرد:

در نهایت فایل جاوا برای ساخت ویجت شناور (Widget) به نام  FloatingViewService.java به صورت زیر خواهد بود.

۲-۳ مدیریت مجوز Overdraw

اکنون یکی از مراحل پایانی اضافه کردن floating view به وسیله شروع  FloatingViewService است. برای انجام این کار، ما باید بررسی کنیم که آیا مجوز android.permission.SYSTEM_ALERT_WINDOW قرار داده شده است یا خیر؟ برای اندروید با API22 و کمتر از آن این مجوز به صورت پیش فرض داده میشود اما در API بزرگتر از ۲۲ باید زمان اجرای برنامه بررسی شود.

اگر مجوز صادر نشده است، ما باید صفحه مدیریت مجوز ها را باز کنیم و مجوز استفاده از Settings.ACTION_MANAGE_OVERLAY_PERMISSION را در آن صادر کنیم. در زیر ما صفحه مجوز را برای اعطا مجوز android.permission.SYSTEM_ALERT_WINDOW باز می کنیم.

در اینجا کد MainActivity برای نمایش ویجت شناور (Widget) با صدور مجوز SYSTEM_ALERT_WINDOW اجرا خواهد شد.

 

android floating widget mobcollege

android floating widget mobcollege

موفق باشید

مدرس و برنامه‌نویس اندروید. تمام تجربه‌هایم را با شما شریک می‌شوم و دوستت دارم بتوانم با کمک و همراهی همه دوستان یک مرجع کامل فارسی برای برنامه‌نویسی اندروید ایجاد کنم.

عضو می‌شوم:)

مقاله های مرتبط :

دیدگاه خود را بیان کنید :

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

۴ دیدگاه برای این مطلب ثبت شده است

  1. حسین
    ۸:۵۹ ۱۳۹۵/۱۲/۲۴

    عالی بود …. ممنون 🙂

    • امیر زنگی آبادی
      ۱۰:۲۹ ۱۳۹۵/۱۲/۲۴

      ممنون از لطف و حمایتتون 🙂

  2. Alireza
    ۸:۲۷ ۱۳۹۵/۱۲/۲۵

    در پروژه ویجت شناور من از یک edittext استفاده کردم

    اما متاسفانه با کلیک بر روی ” ادیت تکست ” کیبورد نمایش داده نمیشود

    به کمک دستورات نمایش کیبورد به صورت دستی قادر به نمایش شدم ولی کی بورد در زیر لایه ویجت شناور قرار می گیرد که قادر

    به تایپ نیست

    آیا روشی هست که این امکان فراهم شود که از ادیت تکست به راحتی در ویجت شناور استفاده کرد.

    • امیر زنگی آبادی
      ۹:۱۷ ۱۳۹۵/۱۲/۲۶

      باسلام
      ویجت‌ها از RemoteViews استفاده می‌کنند که خود از تعدادی از عناصر UI پشتیبانی می‌کند و EditText جزء آن‌ها محسوب نمی‌شود. برای انجام این کار بهتر است مانند ویجت Google پس از انجام touch، کاربر را به یک صفحه از برنامه هدایت کرد و در آنجا ورود اطلاعات انجام شود.
      موفق و پیروز باشید.