前言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 對象。
參數
異常
當資源未找到時拋異常Resources.NotFoundException
public static Toast makeText (Context context, CharSequence text, int duration)
生成一個包含文本視圖的標準 Toast 對象。
參數
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"的備註和代碼截圖都很是棒,整合起來就成一篇優秀的文章了,感謝兩位爲你們帶來精彩的譯文!