自定義Toast樣式

Anonymous-OS發表於2016-06-16

好長時間沒寫部落格了,剛換個新工作沒幾天,今天公司小組要求寫一個自定義的Toast,工作交給我了,其實並不難,幾分鐘搞定,把程式碼發出來當做記錄一下把。廢話不多說,上效果:


結構目錄:


程式碼解析:

1、toast.xml

佈局很簡單就是一個ImageView和TextView橫向排列,不解釋:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="80dp"
              android:layout_height="30dp"
              android:padding="10dp"
              android:gravity="center"
              android:background="@drawable/toaststyle"
              android:orientation="horizontal">

    <ImageView
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/imageView"/>

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:shadowColor="#bbfcd603"
        android:shadowRadius="2.75"
        android:textColor="#ffffff"
        />
</LinearLayout>
2、toaststyle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#21211d" />
    <corners android:topLeftRadius="10dp"
             android:topRightRadius="10dp"
             android:bottomRightRadius="10dp"
             android:bottomLeftRadius="10dp"/>
</shape>
3、CustomToast.java開始我們的封裝程式碼

package com.example.administrator.customview;

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by Administrator on 2016/6/16 0016.
 */
public class CustomToast {
    private static TextView mTextView;
    private static ImageView mImageView;

    public static void showToast(Context context, String message) {
        //載入Toast佈局
        View toastRoot = LayoutInflater.from(context).inflate(R.layout.toast, null);
        //初始化佈局控制元件
        mTextView = (TextView) toastRoot.findViewById(R.id.message);
        mImageView = (ImageView) toastRoot.findViewById(R.id.imageView);
        //為控制元件設定屬性
        mTextView.setText(message);
        mImageView.setImageResource(R.mipmap.ic_launcher);
        //Toast的初始化
        Toast toastStart = new Toast(context);
        //獲取螢幕高度
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        int height = wm.getDefaultDisplay().getHeight();
        //Toast的Y座標是螢幕高度的1/3,不會出現不適配的問題
        toastStart.setGravity(Gravity.TOP, 0, height / 3);
        toastStart.setDuration(Toast.LENGTH_LONG);
        toastStart.setView(toastRoot);
        toastStart.show();
    }
}
程式碼很詳細,不用多解釋,這裡只是一個簡單的例子,大家感興趣的可以自己新增喜歡的設計,順便說一下,這裡很多屬性都可以自己抽出來的當成變數的,大家可以根據自己的風格封裝乘工具類使用。

這裡都是一些純粹的程式碼,沒有涉及到一些其他的資原始檔,大家copy過來就直接用,這裡就不上傳例子了,感覺copy這用更簡單。好了,簡單的Demo就到這裡了。



相關文章