返回介绍

Toast

发布于 2025-03-09 17:00:36 字数 13331 浏览 0 评论 0 收藏 0

Toast

翻译时间:2010 年 11 月 2 日

版本:Android 2.2 r1

类结构

public class Toast extends Object

java.lang.Object

android.widget.Toast

概述

Toast 是一种提供给用户简洁信息的视图。Toast 类帮助你创建和显示该信息。

该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点,即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。

使用该类最简单的方法就是调用一个静态方法,让他来构造你需要的一切并返回一个新的 Toast 对象。

常量

int LENGTH_LONG

持续显示视图或文本提示较长时间。该时间长度可定制。

参见

setDuration(int)

int LENGTH_SHORT

持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。

参见

setDuration(int)

构造函数

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 ()

返回存续期间

请参阅

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 对象。

参数

context 使用的上下文。通常是你的 ApplicationActivity 对象。

resId 要使用的字符串资源 ID,可以是已格式化文本。

duration 该信息的存续期间。值为 LENGTH_SHORTLENGTH_LONG

异常

当资源未找到时抛异常 Resources.NotFoundException

public static Toast makeText ( Context context, CharSequence text, int duration)

生成一个包含文本视图的标准 Toast 对象。

参数

context使用的上下文。通常是你的 ApplicationActivity 对象。
resId要显示的文本,可以是已格式化文本。
duration该信息的存续期间。值为 LENGTH_SHORTLENGTH_LONG
  

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 ()

按照指定的存续期间显示提示信息。

补充

文章链接

让 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

不足之处

现象:当点击一个按钮 可以显示一个四秒的 toast,但是我要是连点两下就是 8 秒 三下十二秒

解决办法:只用一个 Toast, 自己设置 toast.setText(), setDuration(); 之后无论多少次.show() 都能马上更新显示,一会就消失了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文