کار ساده ای است خیلی سخت نیست. و میتوانید هر عنصر گرافیکی یا دکمه یا هرچیزی را در آن قرار دهید. هیچ گونه محدودیتی در این موارد وجود ندارد.
قبل از هر چیزی نیاز هست در AndroidManifest.XML یک Reciver درخواست کنیم. اول به یک فایل XML نیاز است تا دکمه ها یا هرچیزی را در آن قرار دهیم اما قبلش باید یک پوشه درست کنیم تا فایل های XML مان را در آنجا قرار دهیم که به صورت زیر میباشد. و بعد باید یک لایه بسازیم که دکمه ها و عناصر دلخواه خود را در آن قرار دهیم. قدم بعدی ساخت یک کلاس است که از extends AppWidgetProvider میشود میسازیم تا فایل XML مان را در آن قرار دهیم. و در آن حتما متدی با نام Update وجود دارد پس آنرا Override میکنیم. و کد های مربوطه را در آن قرار میدهیم و من برای مثال مینویسم که فقط یک تکست عوض بشه. می توانید بعد در کلاسی عمومی یک LayoutInflater تعریف کنید و فایل XML تان را به یک View تبدیل کنید که قابلیت های خیلی بیشتری به شما میدهد.
اسنیپ
فایل XMLلایهکلاسAndroidManifest.XML+
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget"
android:minHeight="120dip"
android:minWidth="80dip"
android:updatePeriodMillis="10000">
</appwidget-provider><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageButton
android:id="@+id/widgetbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" />
</LinearLayout>import java.util.Random;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class WidgetProvider 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.widget);
remoteViews.setTextViewText(R.id.textWidget, number);
Intent intent = new Intent(context, WidgetProvider.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.widgetbtn, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}
<receiver android:name=".WidgetProvider">
<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>