前言
本章内容是android.widget.Toast,翻译来自"cnmahj"和"jiahuibin",欢迎大家访问他的博客:http://p.toolib.com/step,再次感谢"cnmahj"和"jiahuibin" !欢迎你一起参与Android API 的中文翻译,联系我over140@gmail.com。
声明
欢迎转载,但请保留文章原始出处:)
移动MM博客:http://dev.10086.cn/blog/?55151
Android中文翻译组:http://www.cnblogs.com/over140/
正文
一、结构
public class Toast extends Object
java.lang.Object
android.widget.Toast
二、概述
Toast是一种提供给用户简洁信息的视图。Toast类帮助你创建和显示该信息。
该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点,即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。
使用该类最简单的方法就是调用一个静态方法,让他来构造你需要的一切并返回一个新的 Toast 对象。
三、常量
int LENGTH_LONG
持续显示视图或文本提示较长时间。该时间长度可定制。
参见
int LENGTH_SHORT
持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。
参见
四、构造函数
public Toast (Context context)
构造一个空的 Toast 对象。在调用 show() 之前,必须先调用 setView(View)。
(译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且这种方式获得Toast对象不能使用setText()方法。)
参数
context 使用的上下文。通常是你的 Application 或 Activity 对象。五、公共方法
public int cancel ()
如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。
public int getDuration ()
返回存续期间
请参阅
public int getGravity ()
取得提示信息在屏幕上显示的位置。 < /p>
请参阅
public float getHorizontalMargin ()
返回横向栏外空白。
public float getVerticalMargin ()
返回纵向栏外空白。
public View getView ()
返回 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 对象。
参数
context |
使用的上下文。通常是你的 |
resId |
要使用的字符串资源ID,可以是已格式化文本。 |
duration |
该信息的存续期间。值为 |
异常
当资源未找到时抛异常Resources.NotFoundException< /p>
public static Toast makeText (Context context, CharSequence text, int duration)
生成一个包含文本视图的标准 Toast 对象。
参数
context |
使用的上下文。通常是你的 |
resId |
要显示的文本,可以是已格式化文本。 |
duration |
该信息的存续期间。值为 |
public void setDuration (int duration)
设置存续期间。
请参阅
public void setGravity (int gravity, int xOffset, int yOffset)
设置提示信息在屏幕上的显示位置。
(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移)
请参阅
public void setMargin (float horizontalMargin, float verticalMargin)
设置视图的栏外空白。
参数 < /p>
horizontalMargin 容器的边缘与提示信息的横向空白(与容器宽度的比)。< /em>
verticalMargin 容器的边缘与提示信息的纵向空白(与容器高度的比)。< /p>
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视图,可以包含图像,文字等等。是比较常用的方法。)
请参阅
public void show ()
按照指定的存续期间显示提示信息。
六、补充
文章链接
示例代码
示例一:使用图片的Toast
< /p>
ImageView view = new ImageView(this);
view.setImageResource(R.drawable.icon);
toast.setView(view);
toast.show();
示例二:带文字带图片Toast
// 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
<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
<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
<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文件
/** 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
七、不足之处
现象:当点击一个按钮 可以显示一个四秒的toast,但是我要是连点两下就是8秒 三下十二秒
解决办法:只用一个Toast, 自己设置toast.setText(), setDuration(); 之后无论多少次.show()都能马上更新显示, 一会就消失了
结束