بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

یک پروژه ی اموزشی برای ساخت ویجت

مدیریت گفتگو
OmidAhmadian 12 سال پیش
آخرین تغییر: 11 سال پیش

سلام
چند وقت پیش یک پروژه ی ساده از نحوه ی ساخت ویجت برای خودم درست کردم تا هروقت خواستم تو برنامه هام از ویجت استفاده کنم ازش استفاده کنم از اونجایی که بعضی از دوستان تمایل داشتند اموزش کار با ویجت ها رو یاد بگیرند گفتم بزارمش اینجا تا بقیه هم استفاده کنند 
برای اینکه راحت تر متوجه بشید چی به چیه هم یه اموزش خلاصه تا شب براش اماده می کنم و بعنوانه پاسخ همین پرسش درج می کنم 

اینم لینک دانلود پروژه

اینم لینک کمکی ( اگر لینک بالا خراب بود )

نظرات

Mr7 12 سال پیش
عالیه ممنون
احسان منصوری 12 سال پیش
آقا یه سوال. روش ساخت ویجت ها ثابته؟ یعنی با یه روش میشه هر نوع ویجتی ساخت؟
override 12 سال پیش
دم همه ی اونایی که حاضرن اطلاعات و معلوماتشون رو با بقیه شر کنن گرم
OmidAhmadian 12 سال پیش
روش ساخت ویجت ها ثابت نیست ولی اساس و پایه ی همشون یکیه
MEHDI007 12 سال پیش
خیلی ممنون دمت گرم:)
***ali*** 12 سال پیش
آقا خدا خیرت بده
***ali*** 12 سال پیش
دم اپن سورس گرم دم اشتراک گذاری گرم. فقط چون upload.ir زود حذف میشه بهتره جای دیگه ای آپ کرد تا همه ی دوستان استفاده کنند.
hamed 12 سال پیش
خیلی خوبه. تشکر همه جوره.
OmidAhmadian 12 سال پیش
بگید کجا اپلود کنم من همونجا اپلود می کنم
MEHDI007 12 سال پیش
اپالود بوی اپ کن.من که دانلود کردم عالی بود
Seyed.Mahdi 12 سال پیش
با سلام اين لينك مثل اينكه خراب شده دانلود نميشه لدفن يه جا ديگه آپ كنيد. ممنون.
rayacoder 12 سال پیش
ویجت ها در اندروید کامل نیستند و دارای نواقص زیادی هستن. برای مثال خیلی از کارها رو نمیشه در ویجت ها انجام داد و یا اگر بشه انجام داد باید خیلی راهها رو طی کرد یا یه چیزهایی رو دور زد. بعضی از چیزهای ساده که میشه در یه اکتیویتی ساخت به هیچ وجه قابل پیاده سازی در ویجت نیست. در کل بعضی دلایل باعث میشه که راههای متفاوتی برای ساخت ویجت وجود داشته باشه. به نظر من استاندارد نبودن راههای ساخت ویجت باعث شده جناب آقاجانی تمایل به آموزش این بحث نداشته باشه. به هر حال از بیان راهتون ممنونم و امیدوارم بهترین راهها رو برای استفاده دیگران در اینجا شرح بدید.

پاسخ‌ها 2

OmidAhmadian 12 سال پیش

یه هفته پیش !!! قول دادم که یک اموزش مختصر برای این پروژه بزارم ولی به دلیله مشغله ی فراوان یادم رفت الان یادم اومد گفتم تا دوباره یادم نرفته بیام اموزشش رو بزارم

این چیزی که می ذارم حاصل تجربیاتیه که این مدت بدست اوردم و ممکنه راه های بهتری هم برای کار با widget ها وجود داشته باشه و دوستان بلد باشند که در این صورت ازشون خواهش می کنم راهشون رو همینجا بگند تا من و بقیه هم استفاده کنیم
خب بهتره کم کم شروع کنیم :
برای قرار دادن ویجت در برنامه باید 
3 تا فایل بسازید و چند خط کد هم به فایل   manifest پروژتون اضافه کنید .

3 تا فایلی که باید به پروژه اضافه کنید رو در تصویر زیر می بینید .

پس یک پروژه به اسم widgetProject  می سازیم.

توی این پروژه قراره یه ویجت بسازیم که شامل 2 تا textview  و یک button  هست .textview  اول قراره زمان رو نشونمون بده و هدف از قرار دادنش توی پروژه اینه که بفهمیم چطور میشه ویجت ها رو هر چند ثانیه یا دقیقه آپدیت کرد .textview  بعدی هم یه شمارنده است که از صفر شروع میشه و وقتی روی button  کلیک می کنیم یکی به مقدارش اضافه میشه و هدف از قرار دانش هم اینه که بفهمیم چطور میشه رویداد کلیک کردن روی یه view  رو در ویجت ها بکار برد.:

همونطور که در عکس بالا می بینید یه فایل xml  به نام widget.xml  توی پوشه ی layout می سازیم که این فایل رابط گرافیکی ویجت رو تشکیل میشه

ای دی ها رو به صورت زیر قرار بدید :
txtTime
txtCounter
btnCounter

حالا توی پوشه ی res یه پوشه ی دیگه به اسم xml درست کنید و یه فایل xml دیگه به اسم widget_info.xml  درونش درست کنید این فایل اطلاعات مربوط به ویجتمون رو در بر می گیره ،درون این فایل رو مطابق شکل زیر پر کنید:


initialLayout
  : همون رابط گرافیکی ویجتمونه
minheight,minwidth  : طول و عرض ویجت رو مشخص می کنه که طبق فرمول خاصی پر میشه به این ترتیب که لانچر اندروید خالص دارای 4 خانه ی افقی و 4 خانه ی عمودی است که شما می تونید از 1 تا 4 خانه را برای طول و عرض ویجت انتخاب کنید بعد از انتخاب ان را توی فرمول زیر قرار می دید و در نهایت سایز ویجت بدست میاد ( n  در فرمول زیر نماد تعداد خانه ی انتخابی از 1 تا 4 است )
(n*74)-2

برای مثال اگر عرض ویجت 2 خانه و طول ان 3 خانه باشد اندازه ی عرض و طول به ترتیب 146 و 220 می شود

updatePeriodMillis  : چرخه ی زمانی اپدیت ویجت ، البته برای قرار دادن مقداره آن باید به 2 نکته توجه کرد اول اینکه مقدار باید به میلی ثانیه وارد شود و دوم هم اینکه باید این مقدار بیش از 30 دقیقه یا 1800000 میلی ثانیه باشد در غیر اینصورت بصورت اتوماتیک مقدار ان 1800000 محاسبه می شود البته نگران نباشید اگر لازم باشه زودتر از این موقع ویجت اپدیت شود راهی وجود داره که بعدا بهش اشاره می کنیم.

حالا نوبته اینه که ویجت رو برای نرم افزار معرفی کنیم که این معرفی در فایل manifest.xml انجام میشه همونطور که در شکل زیر می بینید یه receiver  معرفی می کنیم :

 <receiver
   android:name=".FirstAppWidget" //اسم کلاسه مربوط به مدیریت ویجت
   android:label="@string/app_name" >  //لیبل ویجت که در قسمت ویجت های گوشی نمایش داده میشه
   <intent-filter>
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>

   <meta-data
       android:name="android.appwidget.provider"
       android:resource="@xml/widget_info" />  
 </receiver>
<service android:name=".CounterService" /> //این سرویسه کارش چیزه دیگست ربطی به معرفی ویجت نداره

بعد از معرفی می رسیم به بخش قشنگ ماجرا که همون کدنویسی ویجت هست .کدنویسی رو توی یه کلاس به نام firstappwidget.java  انجام می دیم که اونم چیزه پیچیده ای نداره و با خوندن کد ها به راحتی متوجهش می شید


امیدوارم که توضیحاتم مفید باشه :)

نظرات

Borhani 12 سال پیش
مفید بود تشکر
sami 12 سال پیش
خیلی ممنون.(هر چقدم که ویجت تو اندروید مشکل داشته باشه گاهی وقتا واسه بعضی از اپلیکیشنا وجودش میتونه مفید باشه :) . )آموزش خوبی بود ،رفیق... دمت گرم...
Seyed.Mahdi 12 سال پیش
امید جان خسته نباشی دلاور خیلی ممنونم خیلی ممنونم . ادامه بده لدفن :)
Seyed.Mahdi 12 سال پیش
امیدوارم این تاپیک خیلی قشنگتر از اینی که هست بشه ...
f-Dehghan 11 سال پیش
توضیحات عالی بودن حیف که نیمه تمام ماند....
moji19 11 سال پیش
میشه آموزش رو ادامه بدید؟ ممنون میشیم
moji19 11 سال پیش

داداش دستت درد نکنه

چطور میشه از داخل برنامه مثلا با کلیک روی یک دکمه داخل اکتیویتی، ویجت در صفحه درست بشه؟

ممنون میشم اگه پاسخ بدی 

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .