Android 中文 API (36) —— Toast

前言html

  本章內容是android.widget.Toast,版本爲Android 2.2 r1,翻譯來自"cnmahj"和"jiahuibin",歡迎你們訪問他的博客:http://p.toolib.com/step,再次感謝"cnmahj"和"jiahuibin" !歡迎你一塊兒參與Android API 的中文翻譯,聯繫我over140@gmail.com。
 java

 

聲明android

  歡迎轉載,但請保留文章原始出處:)
 app

    農民伯伯:http://over140.blog.51cto.com/ide

    Android中文翻譯組:http://www.cnblogs.com/over140/  函數

 

正文佈局

  1、結構測試

    public class Toast extends Objectui

 
    java.lang.Object
      android.widget.Toast
 this

 

  2、概述
 

    

    Toast是一種提供給用戶簡潔信息的視圖。Toast類幫助你建立和顯示該信息。

    該視圖已浮於應用程序之上的形式呈現給用戶。由於它並不得到焦點,即便用戶正在輸入什麼也不會受到影響。它的目標是儘量已不顯眼的方式,使用戶看到你提供的信息。有兩個例子就是音量控制和設置信息保存成功。

    使用該類最簡單的方法就是調用一個靜態方法,讓他來構造你須要的一切並返回一個新的 Toast 對象。

 

  3、常量

 

       int  LENGTH_LONG

 持續顯示視圖或文本提示較長時間。該時間長度可定製。

       參見

              setDuration(int)

 

int  LENGTH_SHORT

持續顯示視圖或文本提示較短期。該時間長度可定製。該值爲默認值。

       參見

              setDuration(int)

 

  4、構造函數

 

       public Toast (Context context)

       構造一個空的 Toast 對象。在調用 show() 以前,必須先調用 setView(View)

(譯者注:只有使用setView(View)的時候,才使用new Toast(Content content)來獲得Toast對象,不然必須用makeText()方法來建立toast對象,而且這種方式得到Toast對象不能使用setText()方法。

       參數

              context    使用的上下文。一般是你的 Application Activity 對象。 

 

  5、公共方法

 

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

按照指定的存續期間顯示提示信息。

 

  6、補充

 

       文章連接

              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

 

  7、不足之處
 

    現象:當點擊一個按鈕 能夠顯示一個四秒的toast,可是我要是連點兩下就是8秒 三下十二秒
    解決辦法:只用一個Toast, 本身設置toast.setText(), setDuration(); 以後不管多少次.show()都能立刻更新顯示, 一會就消失了

 

結束
 

  本文以"cnmahj"的譯文爲主,"jiahuibin"的備註和代碼爲輔。因爲管理疏忽形成兩人翻譯重複,故本文聯合署名,但"cnmahj"僅翻譯了原文部分,翻譯得很好,而"jiahuibin"的備註和代碼截圖都很是棒,整合起來就成一篇優秀的文章了,感謝兩位爲你們帶來精彩的譯文!  

相關文章
相關標籤/搜索