Android 中文 API (36) —— Toast-阿里云开发者社区

开发者社区> shy丶gril> 正文

Android 中文 API (36) —— Toast

简介:
+关注继续查看

前言

  本章内容是android.widget.Toast,版本为Android 2.2 r1,翻译来自"cnmahj"和"jiahuibin",欢迎大家访问他的博客:http://p.toolib.com/step,再次感谢"cnmahj"和"jiahuibin" !欢迎你一起参与Android API 的中文翻译,联系我over140@gmail.com。 

 

声明

  欢迎转载,但请保留文章原始出处:) 

    博客园:http://www.cnblogs.com/

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

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

    

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

 

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)

设置视图的栏外空白。

    参数

        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, 
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"的备注和代码截图都非常棒,整合起来就成一篇优秀的文章了,感谢两位为大家带来精彩的译文!


转载:http://www.cnblogs.com/over140/archive/2010/11/12/1875403.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9990 0
在Maven Central发布中文API的Java库
开发一个简单的Java库, 通过sonatype发布到Maven主库. Publish Java library with APIs in Chinese on Maven Central, through Sonatype.
850 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13774 0
+关注
1878
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载