天天看點

Android 中文 API (36) —— Toast

一、結構

    public class Toast extends Object

    java.lang.Object

android.widget.Toast

二、概述

    

    Toast是一種提供給使用者簡潔資訊的視圖。Toast類幫助你建立和顯示該資訊。

    該視圖已浮于應用程式之上的形式呈現給使用者。因為它并不獲得焦點,即使使用者正在輸入什麼也不會受到影響。它的目标是盡可能已不顯眼的方式,使使用者看到你提供的資訊。有兩個例子就是音量控制和設定資訊儲存成功。

    使用該類最簡單的方法就是調用一個靜态方法,讓他來構造你需要的一切并傳回一個新的 Toast 對象。

三、常量

       int  LENGTH_LONG

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

       參見

int  LENGTH_SHORT

持續顯示視圖或文本提示較短時間。該時間長度可定制。該值為預設值。

四、構造函數

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

傳回存續期間

       請參閱

public int getGravity ()

     取得提示資訊在螢幕上顯示的位置。

    請參閱

public float getHorizontalMargin ()

傳回橫向欄外空白。

public float getVerticalMargin ()

傳回縱向欄外空白。

傳回 View 對象。

public int getXOffset ()

傳回相對于參照位置的橫向偏移像素量。

public int getYOffset ()

傳回相對于參照位置的縱向偏移像素量。

生成一個從資源中取得的包含文本視圖的标準 Toast 對象。

    參數

context

resId

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

duration

      當資源未找到時抛異常Resources.NotFoundException

生成一個包含文本視圖的标準 Toast 對象。

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

public void setDuration (int duration)

設定存續期間。

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

設定提示資訊在螢幕上的顯示位置。

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

public void setMargin (float horizontalMargin, float verticalMargin)

設定視圖的欄外空白。

        horizontalMargin         容器的邊緣與提示資訊的橫向空白(與容器寬度的比)。

           verticalMargin             容器的邊緣與提示資訊的縱向空白(與容器高度的比)。

public void setText (int resId)

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

        resId      為 Toast 指定的新的字元串資源ID。

    參數<code></code>

        s   為 Toast 指定的新的文本。

設定要顯示的 View 。

(譯者注:注意這個方法可以顯示自定義的toast視圖,可以包含圖像,文字等等。是比較常用的方法。)

public void show ()

按照指定的存續期間顯示提示資訊。

六、補充

       文章連結

       示例代碼

      示例一:使用圖檔的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

&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    &gt;

&lt;Button android:id="@+id/button1"

    android:layout_height="wrap_content"

    android:text="Toast顯示View"

/&gt;

&lt;Button android:id="@+id/button2"

    android:text="Toast直接輸出"

&lt;Button android:id="@+id/button3"

    android:text="VolumeToast應用"

&lt;/LinearLayout&gt;

        Toast.xml

&lt;ImageView android:src="@drawable/toast"

    android:layout_width="wrap_content"

&lt;TextView android:id="@+id/tv1"

    android:text=""

        Volumetoast.xml

&lt;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"

  &gt;

          &lt;TextView           

                  android:layout_width="fill_parent"

                  android:layout_height="wrap_content"

                  android:text="Volume"

              /&gt;

              &lt;ProgressBar 

                  android:id="@+id/progress"

                  android:layout_width="280dp"

                  android:progress="50"

                  android:max="100"

                  style="?android:attr/progressBarStyleHorizontal"

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

            Toast.makeText(toasttest.this,"直接輸出測試", Toast.LENGTH_LONG).show();

    OnClickListener bt3lis=new OnClickListener(){

        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,這是兩種常用的方法,大家可以根據具體情況進行選擇。

        下載下傳

七、不足之處

    現象:當點選一個按鈕 可以顯示一個四秒的toast,但是我要是連點兩下就是8秒 三下十二秒

解決辦法:隻用一個Toast, 自己設定toast.setText(), setDuration(); 之後無論多少次.show()都能馬上更新顯示, 一會就消失了

繼續閱讀