Android 用のデジタル ウィジェットを開発していますが、ウィジェットの更新に行き詰まっています。
更新時のオーバーライドを設定し、ビットマップを使用して書体で時間と分を表示しましたが、それを携帯電話のホーム画面に追加しても更新されません。つまり、更新された時間が表示されません。
ここに私のウィジェットクラスがあります: 最初に、更新時のオーバーライドがあります:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i = 0; i < appWidgetIds.length; i++) {
int appWidgetId = appWidgetIds[i];
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
int hour = today.hour;
CharSequence h = Integer.toString(hour);
String hh = h.toString();
int minute = today.minute;
CharSequence m = Integer.toString(minute);
String mm = ":" + m.toString();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setImageViewBitmap(R.id.imageView1, getFontBitmap(context, hh, Color.WHITE, 70));
views.setImageViewBitmap(R.id.imageView2, getFontBitmap1(context, mm, Color.WHITE, 70));
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
そしてビットマップ
public static Bitmap getFontBitmap(Context context, String text, int color, float fontSizeSP) {
int fontSizePX = convertDiptoPix(context, fontSizeSP);
int pad = (fontSizePX / 9);
Paint paint = new Paint();
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "bold.ttf");
paint.setAntiAlias(true);
paint.setTypeface(typeface);
paint.setColor(color);
paint.setTextSize(fontSizePX);
int textWidth = (int) (paint.measureText(text) + pad * 2);
int height = (int) (fontSizePX / 0.75);
Bitmap bitmap = Bitmap.createBitmap(textWidth, height, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
float xOriginal = pad;
canvas.drawText(text, xOriginal, fontSizePX, paint);
return bitmap;
}
public static Bitmap getFontBitmap1(Context context, String text, int color, float fontSizeSP) {
int fontSizePX = convertDiptoPix(context, fontSizeSP);
int pad = (fontSizePX / 9);
Paint paint = new Paint();
Typeface typeface = Typeface.createFromAsset(context.getAssets(), "thin.ttf");
paint.setAntiAlias(true);
paint.setTypeface(typeface);
paint.setColor(color);
paint.setTextSize(fontSizePX);
int textWidth = (int) (paint.measureText(text) + pad * 2);
int height = (int) (fontSizePX / 0.75);
Bitmap bitmap = Bitmap.createBitmap(textWidth, height, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
float xOriginal = pad;
canvas.drawText(text, xOriginal, fontSizePX, paint);
return bitmap;
}
public static int convertDiptoPix(Context context, float dip) {
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());
return value;
}
res/xml の私の widget.xml は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="288dp"
android:minHeight="144dp"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/widget_layout">
</appwidget-provider>
これが私の受信機です
<receiver android:name="widget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget"/>
</receiver>
助けて?