Denna tråd är till för att diskutera ett gemensamt sätt att skinna Android widgets. Ideen går ut på att man renderar hela widgeten som en bild, vilken i sin tur byggs upp av en xml fil samt ett valfritt antal bilder, som lagras i en zip.
Jag har gjort ett snabbt proof of concept, med en layout som bara innehåller en imageview och sedan testat följande kod (med en bild lagd i rooten på mitt sd kort)
Code:
RemoteViews remoteViews;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
String sdcard = Environment.getExternalStorageDirectory().toString();
Bitmap old_icon = BitmapFactory.decodeFile(sdcard + "/background.png"); ;
Bitmap icon = Bitmap.createBitmap(420,109,Config.ARGB_8888);
Canvas canvas = new Canvas(icon);
Paint paint = new Paint();
paint.setColorFilter(null);
canvas.drawBitmap(old_icon,0,0,paint);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
paint.setTextAlign(Align.CENTER);
paint.setColor(Color.WHITE);
paint.setTextSize(12);
canvas.drawText("lala", 36, 19, paint);
remoteViews.setImageViewBitmap(R.id.widget_image, icon);
Tanken är alltså att man läser in en xml fil, där man anger bakgrund (komplett med marginaler osv) samt alla de element som widgeten behöver. Detta gör att man om man vill kan ha stöd för flera widgets i samma skin fil om man av någon anledning skulle vilja det.
Någon som ser några problem med denna ide? Man kan tänka sig att man bara vid uppstart renderar de delar av vyn som är statiska och sedan utgår från denna förrenderade vy när man ska uppdatera det dynamiska innehållet.