让我们制作一个Toast吧

本文介绍了Android中的Toast消息提示机制,探讨了如何使用Toast类及其makeText方法创建并展示消息提示。此外,还讨论了如何定制Toast的位置及外观,并展示了如何确保Toast在GUI线程中正确显示。

 

Toast是一种转瞬即逝的对话框,它在淡出之前会显示几秒钟。Toast不需要焦点,而且是非模态的,因此,它们不会中断当前活跃的应用程序。

 

Toast最好的地方是它可以告知用户事件,而不需要强迫用户打开一个Activity或阅读一个Notification。它为运行在后台的Service,在不中断前台应用程序的前提下,告知用户事件提供了理想的机制。

 

Toast类包含一个静态的makeText方法,用来创建一个标准的Toast显示窗口。传入应用程序上下文、显示的文本和要显示的时间(LENGTH_SHORT或者LENGTH_LONG)来构建一个新的Toast。一旦Toast已经创建完成,调用show方法来显示它,如下面的代码片段所示:

 

Context context = getApplicationContext();

String msg = “To health and happiness!”;

int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, msg, duration);

toast.show();

 

8-1 显示了一个Toast。在它淡出前,它将在屏幕上保持2秒左右的时间。在它可见的时候,其后的应用程序还能保持完全的响应和交互。

 

8-1

 

定制Toast

 

标准的Toast文本消息窗口一般来说应该是足用了,但在一些情形中,你可能想要定制它的外观和屏幕位置。你可以通过设定它的显示位置和指定可选的ViewLayout来修改一个Toast

 

下面的代码片段显示了如何用setGravity方法来将一个Toast布局在屏幕的底部:

 

Context context = getApplicationContext();

String msg = “To the bride an groom!”;

int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, msg, duration);

int offsetX = 0;

int offsetY = 0;

toast.setGravity(Gravity.BOTTOM, offsetX, offsetY);

toast.show();

 

当仅靠一个文本消息不能完成任务时,你可以指定一个自定义的ViewLayout来显示一个更加复杂更加美观的外观。使用setView方法,你可以指定任何View(包括Layout),在转瞬即逝的文本窗口中显示。

 

例如,下面的片段指定了一个Layout,它包含第4章中创建的指南针构件和一个TextView,来作为一个Toast显示。

 

Context context = getApplicationContext();

String msg = “Cheers!”;

int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, msg, duration);

toast.setGravity(Gravity.TOP, 0, 0);

LinearLayout ll = new LinearLayout(context);

ll.setOrientation(LinearLayout.VERTICAL);

TextView myTextView = new TextView(context);

CompassView cv = new CompassView(context);

myTextView.setText(msg);

int lHeight = LinearLayout.LayoutParams.FILL_PARENT;

int lWidth = LinearLayout.LayoutParams.WRAP_CONTENT;

ll.addView(cv, new LinearLayout.LayoutParams(lHeight, lWidth));

ll.addView(myTextView, new LinearLayout.LayoutParams(lHeight, lWidth));

ll.setPadding(40, 50, 0, 50);

toast.setView(ll);

toast.show();

 

上面的Toast显示如图8-2所示。

 

8-2

 

在工作者线程中使用Toast

 

作为GUI组件,Toast必须在GUI线程中打开,否则会抛出一个线程异常。在下面的例子中,Handler用来保证ToastGUI线程中打开:

 

private void mainProcessing() {

Thread thread = new Thread(null, doBackgroundThreadProcessing, “Background”);

thread.start();

}

 

private Runnable doBackgroundThreadProcessing = new Runnable() {

public void run() {

backgroundThreadProcessing();

}

};

 

private void backgroundThreadProcessing() {

handler.post(doUpdateGUI);

}

 

// Runnable that executes the update GUI method.

private Runnable doUpdateGUI = new Runnable() {

public void run() {

Context context = getApplicationContext();

String msg = “To open mobile development!”;

int duration = Toast.LENGTH_SHORT;

Toast.makeText(context, msg, duration).show();

}

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值