前言html
本章内容是android.widget.Toast,版本为Android 2.2 r1,翻译来自"cnmahj"和"jiahuibin",欢迎你们访问他的博客:http://p.toolib.com/step,再次感谢"cnmahj"和"jiahuibin" !欢迎你一块儿参与Android API 的中文翻译,联系我over140@gmail.com。
java
声明android
欢迎转载,但请保留文章原始出处:)
app
农民伯伯:http://over140.blog.51cto.com/ide
Android中文翻译组:http://www.cnblogs.com/over140/ 函数
正文布局
1、结构测试
public class Toast extends Objectui
java.lang.Object
android.widget.Toast
this
2、概述

Toast是一种提供给用户简洁信息的视图。Toast类帮助你建立和显示该信息。
该视图已浮于应用程序之上的形式呈现给用户。由于它并不得到焦点,即便用户正在输入什么也不会受到影响。它的目标是尽量已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。
使用该类最简单的方法就是调用一个静态方法,让他来构造你须要的一切并返回一个新的 Toast 对象。
3、常量
int LENGTH_LONG
持续显示视图或文本提示较长时间。该时间长度可定制。
参见
setDuration(int)
int LENGTH_SHORT
持续显示视图或文本提示较短期。该时间长度可定制。该值为默认值。
参见
setDuration(int)
4、构造函数
public Toast (Context context)
构造一个空的 Toast 对象。在调用 show() 以前,必须先调用 setView(View)。
(译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来获得Toast对象,不然必须用makeText()方法来建立toast对象,而且这种方式得到Toast对象不能使用setText()方法。)
参数
context 使用的上下文。一般是你的 Application 或 Activity 对象。
5、公共方法
public int cancel ()
若是视图已经显示则将其关闭,尚未显示则再也不显示。通常不须要调用该方法。正常状况下,视图会在超过存续期间后消失。
public int getDuration ()
返回存续期间
请参阅
setDuration(int)
public int getGravity ()
取得提示信息在屏幕上显示的位置。
请参阅
Gravity
setGravity()
public float getHorizontalMargin ()
返回横向栏外空白。
public float getVerticalMargin ()
返回纵向栏外空白。
public View getView ()
返回 View 对象。
请参阅
setView(View)
public int getXOffset ()
返回相对于参照位置的横向偏移像素量。
Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);
msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
msg.show();
public int getYOffset ()
返回相对于参照位置的纵向偏移像素量。
public static Toast makeText (Context context, int resId, int duration)
生成一个从资源中取得的包含文本视图的标准 Toast 对象。
参数
异常
当资源未找到时抛异常Resources.NotFoundException
public static Toast makeText (Context context, CharSequence text, int duration)
生成一个包含文本视图的标准 Toast 对象。
参数
public void setDuration (int duration)
设置存续期间。
请参阅
LENGTH_SHORT
LENGTH_LONG
public void setGravity (int gravity, int xOffset, int yOffset)
设置提示信息在屏幕上的显示位置。
(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)能够把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移)
请参阅
Gravity
getGravity()
public void setMargin (float horizontalMargin, float verticalMargin)
设置视图的栏外空白。
参数
horizontalMargin 容器的边缘与提示信息的横向空白(与容器宽度的比)。
verticalMargin 容器的边缘与提示信息的纵向空白(与容器高度的比)。
public void setText (int resId)
更新以前经过 makeText() 方法生成的 Toast 对象的文本内容。
参数
resId 为 Toast 指定的新的字符串资源ID。
public void setText (CharSequence s)
更新以前经过 makeText() 方法生成的 Toast 对象的文本内容。
参数
s 为 Toast 指定的新的文本。
public void setView (View view)
设置要显示的 View 。
(译者注:注意这个方法能够显示自定义的toast视图,能够包含图像,文字等等。是比较经常使用的方法。)
请参阅
getView()
public void show ()
按照指定的存续期间显示提示信息。
6、补充
文章连接
让Toast一直显示的解决方法
通知 Toast详细用法(显示view)
Android一种信息提示机制:Toast
[推荐] android Toast大全(五种情形)创建属于你本身的Toast
示例代码
示例一:使用图片的Toast
Toast toast
=
new
Toast(
this
);
ImageView view
=
new
ImageView(
this
);
view.setImageResource(R.drawable.icon);
toast.setView(view);
toast.show();
示例二:带文字带图片Toast

private
void
showToast() {
//
1 建立Toast
Toast toast
=
Toast.makeText(
this
,
"
图文显示
"
, Toast.LENGTH_LONG);
//
2 建立Layout,并设置为水平布局
LinearLayout mLayout
=
new
LinearLayout(
this
);
mLayout.setOrientation(LinearLayout.HORIZONTAL);
ImageView mImage
=
new
ImageView(
this
);
//
用于显示图像的ImageView
mImage.setImageResource(R.drawable.icon);
View toastView
=
toast.getView();
//
获取显示文字的Toast View
mLayout.addView(mImage);
//
添加到Layout
mLayout.addView(toastView);
//
3 关键,设置Toast显示的View(上面生成的Layout).
toast.setView(mLayout);
toast.show();
}
示例三:综合Toast例子

Main.xml
<?
xml version="1.0" encoding="utf-8"
?>
<
LinearLayout
xmlns:android
="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
<
Button
android:id
="@+id/button1"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="Toast显示View"
/>
<
Button
android:id
="@+id/button2"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="Toast直接输出"
/>
<
Button
android:id
="@+id/button3"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="VolumeToast应用"
/>
</
LinearLayout
>
Toast.xml
<?
xml version="1.0" encoding="utf-8"
?>
<
LinearLayout
xmlns:android
="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
<
ImageView
android:src
="@drawable/toast"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
/>
<
TextView
android:id
="@+id/tv1"
android:text
=""
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
/>
</
LinearLayout
>
Volumetoast.xml
<?
xml version="1.0" encoding="utf-8"
?>
<
LinearLayout
xmlns:android
="http://schemas.android.com/apk/res/android"
android:layout_width
="280dp"
android:layout_height
="wrap_content"
android:gravity
="center_horizontal"
android:orientation
="vertical"
>
<
TextView
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:text
="Volume"
/>
<
ProgressBar
android:id
="@+id/progress"
android:layout_width
="280dp"
android:layout_height
="wrap_content"
android:progress
="50"
android:max
="100"
style
="?android:attr/progressBarStyleHorizontal"
/>
</
LinearLayout
>
java文件
public
class
toasttest
extends
Activity {
/**
Called when the activity is first created.
*/
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1
=
(Button)findViewById(R.id.button1);
button1.setOnClickListener(bt1lis);
Button button2
=
(Button)findViewById(R.id.button2);
button2.setOnClickListener(bt2lis);
Button button3
=
(Button)findViewById(R.id.button3);
button3.setOnClickListener(bt3lis);
}
OnClickListener bt1lis
=
new
OnClickListener(){
@Override
public
void
onClick(View v) {
showToast();
}
};
OnClickListener bt2lis
=
new
OnClickListener(){
@Override
public
void
onClick(View v) {
Toast.makeText(toasttest.
this
,
"
直接输出测试
"
, Toast.LENGTH_LONG).show();
}
};
OnClickListener bt3lis
=
new
OnClickListener(){
@Override
public
void
onClick(View v) {
showvolumeToast();
}
};
public
void
showToast(){
LayoutInflater li
=
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view
=
li.inflate(R.layout.toast,
null
);
//
把布局文件toast.xml转换成一个view
Toast toast
=
new
Toast(
this
);
toast.setView(view);
//
载入view,即显示toast.xml的内容
TextView tv
=
(TextView)view.findViewById(R.id.tv1);
tv.setText(
"
Toast显示View内容
"
);
//
修改TextView里的内容
toast.setDuration(Toast.LENGTH_SHORT);
//
设置显示时间,长时间Toast.LENGTH_LONG,短期为Toast.LENGTH_SHORT,不能够本身编辑
toast.show();
}
public
void
showvolumeToast() {
//
TODO Auto-generated method stub
LayoutInflater li
=
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View volumeView
=
li.inflate(R.layout.volumetoast,
null
);
((ProgressBar)volumeView.findViewById(R.id.progress)).setProgress(((ProgressBar)volumeView.findViewById(R.id.progress)).getProgress()
+
10
);
//
这里还有点问题,就是progress的进度条不动,由于咱们主要是想给你们展现
//
Toast的用法,这里就不深究了
Toast volumeToast
=
new
Toast(
this
);
volumeToast.setGravity(Gravity.BOTTOM,
0
,
100
);
volumeToast.setView(volumeView);
volumeToast.setDuration(Toast.LENGTH_SHORT);
volumeToast.show();
}
}
备注
咱们的代码没有重复概述中的经过代码布局toast实现方法,咱们是经过布局文件转换成view视图来实现复杂toast,这是两种经常使用的方法,你们能够根据具体状况进行选择。
下载
/Files/over140/2010/11/demo_Toast.rar
7、不足之处
现象:当点击一个按钮 能够显示一个四秒的toast,可是我要是连点两下就是8秒 三下十二秒
解决办法:只用一个Toast, 本身设置toast.setText(), setDuration(); 以后不管多少次.show()都能立刻更新显示, 一会就消失了
结束
本文以"cnmahj"的译文为主,"jiahuibin"的备注和代码为辅。因为管理疏忽形成两人翻译重复,故本文联合署名,但"cnmahj"仅翻译了原文部分,翻译得很好,而"jiahuibin"的备注和代码截图都很是棒,整合起来就成一篇优秀的文章了,感谢两位为你们带来精彩的译文!