【Android開發點滴】自定義Toast樣式

淺步調丶發表於2017-09-24

在我們開發APP的過程中難免會用到toast,但是系統自帶的toast無論從樣式還是效能上來看都不是理想的,在這樣的情況下,我們就需要自己定義toast來替代系統的toast。

首先我們需要定義一個類叫ToastUtil,程式碼如下:

public class ToastUtil {

    private static Toast mToast;
    private static Handler mHandler = new Handler();
    private static Runnable runnable = new Runnable() {
        public void run() {
            mToast.cancel();
            //toast隱藏後,將其置為null
            mToast = null;
        }
    };

    public static void showToast(Context context, String message) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //自定義佈局
        View view = inflater.inflate(R.layout.custom_toast, null);
        TextView text = (TextView) view.findViewById(R.id.toast_message);
        //顯示的提示文字
        text.setText(message);
        mHandler.removeCallbacks(runnable);
        mToast = new Toast(context);
        //設定toast顯示時長
        mToast.setDuration(Toast.LENGTH_SHORT);
        //設定Toast居中顯示
//        mToast.setGravity(Gravity.CENTER, 0, 0);
        mToast.setView(view);
        mToast.show();
    }
}

通過上面的程式碼可以看出來其實就是利用載入佈局檔案的方式替換系統toast的樣式,我的custom_toast.xml檔案是這樣的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@drawable/toast_bg"
    android:padding="10dp">

    <TextView
        android:id="@+id/toast_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:maxLines="2"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:text=""
        android:textColor="#fff"
        android:textSize="14sp" />

</RelativeLayout>

toast_bg.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充的顏色 -->
    <solid android:color="#7791B6" />
    <!-- 弧形的半徑 -->
    <corners android:radius="8dp" />
    <!-- 邊框的顏色及粗細 -->
    <!--<stroke android:color="#000"-->
    <!--android:width="1px"/>-->
</shape>

以下是顯示效果:

這裡寫圖片描述

是不是比系統自帶toast美觀呢?

相關文章