Hi,
I decided to share the solution i found to the problem of Android not
supporting real modal dialogs.
The solution was to draw the dialog by myself. :-( Well, at least
worked fine, besides the problem that its a bit ugly. :-)
Here's the code i used:
static boolean alertShowing;
public static void alert(String msg)
{
int scrW=instance.getWidth(),scrH=instance.getHeight();
alertShowing = true;
final int fh = 18;
// note: we have to draw the dialog on screen, otherwise if we
use Dialog, the application just quits
String[] msgs = msg.split("\n");
Canvas canvas = surfHolder.lockCanvas();
// fill with white
Paint p = new Paint();
p.setColor(0xFFFFFFFF);
canvas.drawRect(0,0,scrW,scrH,p);
p.setColor(0xFFAAAAAA);
int ly = fh+fh/2;
canvas.drawRect(0,0,scrW,ly,p);
// draw caption in black
p.setColor(0xFF000000);
p.setStyle(Paint.Style.STROKE);
canvas.drawRect(0,0,scrW-1,scrH-1,p);
p.setAntiAlias(true);
p.setTextSize(fh);
p.setTypeface(Typeface.DEFAULT_BOLD);
p.setTextAlign(Paint.Align.CENTER);
canvas.drawText("ALERT",scrW/2,fh+fh/4,p);
canvas.drawLine(0,ly,scrW,ly,p);
// draw message
int maxy = scrH-fh*2;
p.setTypeface(Typeface.DEFAULT);
for (int i =0,y=fh*3; i < msgs.length && y < maxy; i++, y += fh
+2)
canvas.drawText(msgs[i], scrW/2, y,p);
String ok = "Ok";
int tx = scrW/2;
int ty = maxy+ly;
canvas.drawText(ok,tx,ty,p);
Rect bounds = new Rect();
p.getTextBounds(ok, 0, ok.length(), bounds);
int ww = bounds.width();
int hh = bounds.height();
canvas.drawRect(tx-ww,ty-hh-3,tx+ww,ty+3,p);
surfHolder.unlockCanvasAndPost(canvas);
while (alertShowing)
try {Thread.sleep(200);} catch (Exception e) {}
}
public boolean onTouchEvent(MotionEvent event)
{
if (alertShowing)
{
alertShowing = false;
return true;
}
}
HTH.
guich
http://www.totalcross.com