自定义Toast工具

1.封装Toast工具

  • 创建Toast显示需要依附的ToastLayout
  • 定义TextView显示Toast内容并设置显示位置

ToastUtil .class

/**
 * @author zhou.jn on 2018/11/27 11:30.
 */

public class ToastUtil {
    private static Toast mToast;
    private static TextView textView;
    /**
     *设置可以自定义背景、边框的Toast
     */
    public static Toast makeText(CharSequence text, int duration) {
        if (MyApplication.mContext != null) {
            if (mToast == null) {
                View toastBg = LayoutInflater.from(MyApplication.mContext).inflate(R.layout.layout_toast, null);
                textView = (TextView) toastBg.findViewById(R.id.tv_toast);
                mToast = new Toast(MyApplication.mContext);
                mToast.setView(toastBg);
            }
            textView.setText(text);
            mToast.setDuration(duration);
        }
        return mToast;
    }

    /**
     * 设置默认类型的Toast
     */
    public static Toast makeText(CharSequence text) {
        if (MyApplication.mContext != null) {
            if (mToast == null) {
                Toast toast = Toast.makeText(MyApplication.mContext, text, Toast.LENGTH_SHORT);
                mToast = toast;
            }
        }
        return mToast;
    }
}

layout_toast.xml


<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_toast"
    android:background="@drawable/bg_toast"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
// <color name="colorSecondPrimary">#536590</color>
    <solid android:color="@color/colorSecondPrimary" />

    <corners android:radius="@dimen/_5px_in720p" />
    <stroke
        android:width="@dimen/_2px_in720p"
        //    <color name="color_999999">#999999</color>
        android:color="@color/color_999999" />
    <padding
        android:bottom="@dimen/_5px_in720p"
        android:left="@dimen/_5px_in720p"
        android:right="@dimen/_5px_in720p"
        android:top="@dimen/_5px_in720p"></padding>
</shape>

MyApplication.class

/**
 * @author zhou.jn on 2018/11/27 11:31.
 */

public class MyApplication extends Application {
    public static  Context mContext;
    @Override
    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }
    public static Context getContext(){
        return mContext;
    }
}

2.使用
MainActivity.class


public class MainActivity extends AppCompatActivity {
    Button btn_click;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_click = (Button) findViewById(R.id.btn_click);
        btn_click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //自定义Toast
                ToastUtil.makeText("toast showing",Toast.LENGTH_SHORT).show();
                //显示默认Toast
                ToastUtil.makeText("hello friend!").show();
            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.utils.MainActivity">

    <Button
        android:id="@+id/btn_click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CLICK" />
</RelativeLayout>

3.结束
4.优点:

  • ①省去了新建Toast时要写 Toast toast = Toast.makeText(MyApplication.mContext, text, Toast.LENGTH_SHORT);这么长的字符串;
  • ②确保每次传入的Context为统一的Toast;
  • ③便于在非Activity的地方弹土司;

猜你喜欢

转载自blog.csdn.net/weixin_37716758/article/details/84566116