前言

  本章内容是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

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

       参见

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

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

    

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

使用的上下文。通常是你的 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 (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)

设置视图的栏外空白。

    参数 < /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视图,可以包含图像,文字等等。是比较常用的方法。

    

getView()

 

public void show ()

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

 

六、补充

       文章链接

              Toast一直显示的解决方法

              通知 Toast详细用法(显示view

              Android一种信息提示机制:Toast

       示例代码

      示例一:使用图片的Toast

 < /p>

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, 
0100);
        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()都能马上更新显示, 一会就消失了

 

结束

  本文以"cnmahj"的译文为主,"jiahuibin"的备注和代码为辅。由于管理疏忽造成两人翻译重复,故本文联合署名,但"cnmahj"仅翻译了原文部分,翻译得很好,而"jiahuibin"的备注和代码截图都非常棒,整合起来就成一篇优秀的文章了,感谢两位为大家带来精彩的译文!
posted on 2011-05-03 15:29  threecc  阅读(669)  评论(0编辑  收藏  举报