Toast使用详解

本文来自人人网android开发交流群

1、Toast 

一、结构

publicclass Toast extends Object

 
Java.lang.Object
android.widget.Toast

 

二、概述

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

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

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

 

三、常量

 

       int LENGTH_LONG

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

       参见

              setDuration(int)

 

int  LENGTH_SHORT

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

       参见

              setDuration(int)

 

四、构造函数

 

       publicToast (Context context)

       构造一个空的 Toast 对象。在调用 show() 之前,必须先调用 setView(View)。

(译者注:只有使用setView(View)的时候,才使用new Toast(Contentcontent)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且这种方式获得Toast对象不能使用setText()方法。)

       参数

             context    使用的上下文。通常是你的 Application 或 Activity 对象。

 

 

五、公共方法

 

public int cancel ()

     如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。

 

public int getDuration ()

返回存续期间

       请参阅

              setDuration(int)

public int getGravity ()

     取得提示信息在屏幕上显示的位置。 </p>

请参阅

Gravity

setGravity()

 

publicfloat getHorizontalMargin ()

返回横向栏外空白。

 

publicfloat 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

使用的上下文。通常是你的 Application 或 Activity 对象。

resId

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

duration

该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LON

异常

当资源未找到时抛异常Resources.NotFoundException</p>

 

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

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

参数

context

使用的上下文。通常是你的 Application 或 Activity 对象。

resId

要显示的文本,可以是已格式化文本。

duration

该信息的存续期间。值为 LENGTH_SHORT 或 LENGTH_LONG

  

public void setDuration (intduration)

设置存续期间。

请参阅

LENGTH_SHORT

LENGTH_LONG

 

public void setGravity (intgravity, int xOffset, int yOffset)

设置提示信息在屏幕上的显示位置。

(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL,0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移)

请参阅

Gravity

getGravity()

 

public void setMargin (floathorizontalMargin, float verticalMargin)

设置视图的栏外空白。

参数 < /p>

    horizontalMargin         容器的边缘与提示信息的横向空白(与容器宽度的比)。</em>

       verticalMargin             容器的边缘与提示信息的纵向空白(与容器高度的比)。</p>

 

 

public void setText (intresId) 

 

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

参数

    resId      为 Toast 指定的新的字符串资源ID。

 

 

public void setText (CharSequence s)

 

更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。

参数

     为 Toast 指定的新的文本。

 

 

 

publicvoid setView (View view)

 

设置要显示的 View 

 

(译者注:注意这个方法可以显示自定义的toast视图,可以包含图像,文字等等。是比较常用的方法。)

请参阅

 

getView()

 

 

 

public void show ()

 

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

 

 

六、补充

 

     文章链接

 

              让Toast一直显示的解决方法

 

              通知 Toast详细用法(显示view)

 

              Android一种信息提示机制: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 {
    
    
    @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()都能马上更新显示, 一会就消失了


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值