吐司提示:Toast 的使用方法
在使用 Android 手機(jī)的時(shí)候,有沒(méi)有遇到過(guò)如圖中這種類(lèi)型的消息提示?
這個(gè)在 Android 中被稱(chēng)為 Toast,用來(lái)短暫的展示一些簡(jiǎn)短的提示信息。相比彈窗來(lái)講它對(duì)用戶(hù)的打擾更小,在提示一段時(shí)間之后會(huì)自動(dòng)消失,通常用來(lái)提示當(dāng)前的狀態(tài)或者一些不太重要的信息。接下來(lái)我們先看看 Toast 的相關(guān)特性然后一起動(dòng)手編寫(xiě)一些與 Toasts 相關(guān)的示例代碼。
1. Toast 的特性
其實(shí)大家在使用 Android 手機(jī)的時(shí)候大致能夠了解 Toast 的特征,這里簡(jiǎn)單歸納一下:
- 用來(lái)展示簡(jiǎn)短消息提示的控件
- 會(huì)在短暫展示之后自動(dòng)消失
- Toast 不會(huì)阻塞 Activiity 或者 Fragment 的運(yùn)行
- 比較適合用來(lái)給用戶(hù)的某個(gè)操作做一個(gè)反饋
2. Toast 的使用方法
Toast 直接繼承自 Object,相當(dāng)于是一個(gè)比較原始的控件,封裝的也比較友好,我們先來(lái)看看 Toast 可用的 API 及相關(guān)參數(shù)
2.1 Toast 常用 API
- public static Toast makeText(Context context, CharSequence text, int duration):
用于創(chuàng)建一個(gè) Toast 并設(shè)置具體的提示文案及展示時(shí)長(zhǎng) - public void show():
顧名思義,觸發(fā) Toast 的展示 - public void setMargin(float horizontal, float vertical):
用于設(shè)置 Toast 垂直方向和水平方向上的間距 - public void setView(View view):
自定義展示的布局樣式
2.2 Toast 中的常量參數(shù)
- public static final int LENGTH_LONG:
長(zhǎng)時(shí)間展示,大約維持 3.5 秒 - public static final int LENGTH_SHORT:
短時(shí)間展示,大約維持 2 秒
2.3 如何創(chuàng)建
- 調(diào)用 Toast 的靜態(tài)方法
makeText
:傳入Context、字符串文案、顯示時(shí)長(zhǎng)即可創(chuàng)建一個(gè) Toast。為了避免內(nèi)存泄露,這里的 Context 建議使用getApplicationContext()
來(lái)獲取 App 的 Context 傳入,如下:
Toast toast = Toast.makeText(getApplicationContext(),"IMOOC Android Study",Toast.LENGTH_LONG);
- 調(diào)用 Toast 的
show()
方法
toast.show();
我們可以將以上兩句串聯(lián)起來(lái),如下:
Toast.makeText(getApplicationContext(),"IMOOC Android Study",Toast.LENGTH_LONG).show();
3. 設(shè)置 Toast 在屏幕中的位置
按照第 2 小節(jié)的方式 show 出來(lái)的 Toast 默認(rèn)會(huì)在屏幕的底部中間位置展示,如果想要不走尋常路,可以通過(guò)接口setGravity(int gravity, int x, int y)
改變 Toast 展示的位置,參數(shù)如下:
- int gravity:
第一個(gè)參數(shù)表示重心,和 Layout 里面的 gravity 類(lèi)似,我們可以直接使用 Gravity.java 類(lèi)里面的常量來(lái)設(shè)置。有以下四種可選項(xiàng):- Gravity.BOTTOM
- Gravity.RIGHT
- Gravity.LEFT
- Gravity.TOP
當(dāng)然我們也可以同時(shí)設(shè)置兩個(gè)值,中間用“|”隔開(kāi),如Gravity.TOP|Gravity.LEFT
表示左上方向。
- int x:
設(shè)置水平方向上的距離,這個(gè)距離的參照是左邊還是右邊依賴(lài)第一個(gè)參數(shù)gravity
- int y:
設(shè)置垂直方向上的距離,這個(gè)距離的參照是頂部還是底部依賴(lài)于第一個(gè)參數(shù)gravity
的設(shè)置
如果設(shè)置 gravity 為 Gravity.CENTER
,x 為 100,y 為 200。那么最后 show 出來(lái)的示意圖如下:
4. Toast 的使用示例
本節(jié)我們用 Toast 實(shí)現(xiàn)一個(gè)“農(nóng)藥”提示,有兩個(gè) Button,點(diǎn)擊會(huì)觸發(fā)一個(gè)短暫的消息提示。代碼比較簡(jiǎn)單,首先在布局中加入兩個(gè) Button:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:padding="10dp"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/dont_wave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="猥瑣發(fā)育,別浪" />
<Button
android:id="@+id/hold_on_we_can_win"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="穩(wěn)住,我們能贏" />
</LinearLayout>
接著在 Java 代碼中注冊(cè)監(jiān)聽(tīng)器,在點(diǎn)擊不同 Button 的時(shí)候彈出不同的 Toast 提示信息:
package com.emercy.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.dont_wave).setOnClickListener(this);
findViewById(R.id.hold_on_we_can_win).setOnClickListener(this);
}
@Override
public void onClick(View v) {
showToast(((TextView) v).getText().toString());
}
private void showToast(String text) {
LinearLayout layout = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.toast, null);
TextView textView = layout.findViewById(R.id.text);
textView.setText(text);
Toast toast = new Toast(this);
toast.setView(layout);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP, 0, 500);
toast.show();
}
}
可以看到在創(chuàng)建 Toast 之后,通過(guò)setView
方法設(shè)置了一個(gè) LinearLayout 類(lèi)型的 View 對(duì)象。通過(guò)這種方式就可以自定義一個(gè)展示樣式,最后編寫(xiě) Toast 的布局樣式代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="bottom"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/mc" />
<TextView
android:id="@+id/text"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp" />
</LinearLayout>
XML 文件中我們橫向放置了一個(gè)圖片和一個(gè)文本,對(duì)應(yīng)的是游戲人物和提示語(yǔ),然后在點(diǎn)擊的時(shí)候彈出此樣式的 Toast。最終編譯運(yùn)行效果如下:
5. 小結(jié)
本節(jié)我們學(xué)習(xí)了一種簡(jiǎn)單的消息提示方式,它適合于一些簡(jiǎn)短且不是太重要的消息,大多數(shù)情況下我們可以直接用靜態(tài)方法makeText
來(lái)創(chuàng)建一個(gè) Toast,但是在一些特定場(chǎng)景下我們也可以通過(guò) API 設(shè)置它的邊界等樣式,或者直接自定義一個(gè) xml 布局讓它完全按自己的樣式去展示。