การสร้าง widget วันที่บน android

จากครั้งก่อนเมื่อนานมาแล้วเราได้ทำการสร้าง widget บน android ขึ้นหลังจากนั้นผมก็ไม่ได้เขียนบทความต่อเป็นเวลานานมาก ครั้งนี้จึงเป็นการต่อจากครั้งก่อน โดยถ้าใครยังไม่เคยอ่านบทความที่แล้วให้ย้อนกลับไปอ่านได้? เรามาสร้าง WIDGET บน ANDROID กัน

เรามาเริ่มกันเลยดีกว่าให้ทำการเปิดโปรเจ็คที่เคยทำไว้ในครั้งที่แล้วขึ้นมาทำต่อ แล้วทำการแก้ไขไฟล์ ThWidget.java โดยทำการเพิ่มโค้ดดังนี้

[sourcecode language=”java”]

package org.thaicoding.widget;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.appwidget.AppWidgetManager;

import android.appwidget.AppWidgetProvider;

import android.content.Context;
import android.widget.RemoteViews;

public class ThWidget extends AppWidgetProvider {

// Define the format string for the date
private SimpleDateFormat formatter = new SimpleDateFormat(
“EEEEEEEEE\nd MMM yyyy”);

@Override
public void onUpdate(Context context,
AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// Retrieve and format the current date
String now = formatter.format(new Date());

// Change the text in the widget
RemoteViews updateViews = new RemoteViews(
context.getPackageName(), R.layout.main);
updateViews.setTextViewText(R.id.text, now);
appWidgetManager.updateAppWidget(appWidgetIds, updateViews);

super.onUpdate(context, appWidgetManager, appWidgetIds);
}

}

[/sourcecode]

จากนั้นทำการแก้ไขไฟล์ AndroidManifest.xml

ดังนี้

[sourcecode language=”xml”]













[/sourcecode]

ลองรันดูก็จะได้แบบนี้ครับ

โค้ดครั้งนี้ต่อจากครั้งก่อนนะครับ สิ่งสำคัญในบทความนี้มีอยู่ 2 จุดคือคลาส ThWidget มีการเขียน method update ดังโค้ดข้างบน ซึ่งมีการ import เรียกใช้งานของวันที่ในภาษาจาวาเข้ามาแล้วทำการ update widget ของเรา ซึ่งโค้ดส่วนที่ทำการ update คือโค้ดนี้ครับ

// Change the text in the widget

RemoteViews updateViews = new RemoteViews(

context.getPackageName(), R.layout.main);

updateViews.setTextViewText(R.id.text, now);

appWidgetManager.updateAppWidget(appWidgetIds, updateViews);

 

super.onUpdate(context, appWidgetManager, appWidgetIds);

จะเห็นว่ามีการสั่งให้ update R.id.text ให้มีค่าเท่ากับ now นั้นเอง ซึ่งเมื่อ widget มีการเรียก update มันก็จะไปเรียกใช้ method update ที่เราเขียนไว้แต่สิ่งสำคัญคือการกำหนดไฟล์ AndroidManifest.xml ว่าเมื่อมีการ update จะไปเรียกใช้คลาสไหนซึ่งการกำหนดก็กำหนดจาก tag นี้ครับ

<receiver android:name=“.ThWidget”

android:label=“@string/widget_name”>

จะเห็นว่ามีการเรียกใช้ class ThWidget นั้นเอง ส่วนจะ update ทุกๆๆกีวินาทีนั้นก็เราสามารถกำหนดจาก file widget.xml ใน folder xml นะครับ android:updatePeriodMillis=”1800000″

 

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *