آموزش ایجاد Widget سفارشی در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ایجاد Widget سفارشی در برنامه نویسی اندروید می پردازیم قبلتر دو آموزش در همین رابطه ایجاد کرده بودیم ولی این Widget با ویجت های قبلی فرق می کند در ادامه می توانید پیشنمایشی از آن را در ادامه مشاهده کنید دیزاین جالبی نشده است ولی شما می توانید خودتان آن را سفارشی سازی کنید.
شما می تونید به سادگی آن را سفارشی سازی کنید از هیچ کتاب خانه نیز در ایجاد این ویجت استفاده نشده است در ادامه با ما همراه باشید.
ابتدای کار شما باید صفحه widget خودتان را بسازید یعنی دیزاینش دست خودتانه هر view که دوست داشته باشید می توانید اضافه کنید در بالا ما از ImageView , Button و TextView استفاده کرده ایم
دوستان آموزش را حتما باید دقیق مثل ما انجام دهید در غیر این صورت با کلی خطا مواجه می شوید.
پس ابتدا در مسیر res/layout یک فایل به نام simple_widget.xml ایجا کنید (نام اختیاری است اما دقت کنید همین نام ها را باید در جاهای دیگر نیز تغییر دهید )
پس کد مربوط به simple_widget.xml همانند زیر می شود این کد مربوط به شکل ظاهری widget که نمایش داده می شود بر می گردد به سلیقه خودتان چیدمان را انجام دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/widget_margin" android:background="#55000000"> <ImageView android:id="@+id/imageView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:scaleType="centerCrop" android:src="@drawable/ptus"/> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="000" android:textSize="@dimen/abc_text_size_large_material" android:textStyle="bold"/> <Button android:id="@+id/actionButton" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="Refresh"/> </LinearLayout> |
دقیقا توضیج دادیم که این layout مربوط به چیست
وارد مسیر res/values شده و یک فایل به نام dimens.xml ایجاد کنید در صورتی که وجود دارد فقط کد زیر را در آن قرار دهید.
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="widget_margin">8dp</dimen> </resources> |
فاصله اجزای داخلی را تعیین می کند.
سپس باید یک کلاس برای این کار بسازید دقت کنید در MainActivity نباید قرار بگیرد یک کلاس جداگانه بسازید و کد زیر را در آن قرار دهید نام کلاس را ما برابر با SimpleWidgetProvider قرار داده ایم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package ir.widget; /** * Created by jefferson on 8/1/2017. */ import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.RemoteViews; import java.util.Random; public class SimpleWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int count = appWidgetIds.length; for (int i = 0; i < count; i++) { int widgetId = appWidgetIds[i]; String number = String.format("%03d", (new Random().nextInt(900) + 100)); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.simple_widget); remoteViews.setTextViewText(R.id.textView, number); Intent intent = new Intent(context, SimpleWidgetProvider.class); intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.actionButton, pendingIntent); appWidgetManager.updateAppWidget(widgetId, remoteViews); } } } |
در صورتی که بروی دکمه refresh کلیک شود متن مربوط به TextView نیز تغییر می کند به خاطر اینکه متوجه شوید چه گونه محتوا را تغییر دهید بیه سفارشی سازی ها به عهده خودتان .
بخش مهم کار در ریشه res یک پوشه به نام xml ایجاد کنید (در صورتی که این را اشباه ایجاد کنید با کلی خطا مواجه می شوید پس با دقت آن را ایجاد کنید باید زیر ریشه خود res باشد یعنی داخل آن)
و در آن یک فایل به نام simple_widget_info.xml ایجاد کرده و کد زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="120dp" android:minHeight="60dp" android:updatePeriodMillis="1800000" android:initialLayout="@layout/simple_widget" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen|keyguard" android:previewImage="@drawable/ptus"> </appwidget-provider> |
در بالا اندازه پیش فرض widget که بروی گوشی قرار میگیرد را تنظیم می کنیم و همین طور عکس و layout که برای آن ایجاد کریدم و به آن میگم که هم می تونه widget بروی صفحه home باشد و هم می تواند در بخش قفل صفحه قرار بگیرد و عکس widget هم که در بخش widget گوشی نمایش داده می شود را تنظیم می کنیم.
آخرین قدم وارد فایل AndroidManifest.xml شده و receiver زیر را تعریف کنید.
1 2 3 4 5 6 7 | <receiver android:name="SimpleWidgetProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/simple_widget_info" /> </receiver> |
این آموزش هم به پایان رسید.
موفق و موید باشید.