美文网首页具体自定义控件
Android自定义仿ios的toast提示(三)

Android自定义仿ios的toast提示(三)

作者: 马木木_1991 | 来源:发表于2019-04-18 16:32 被阅读253次
    仿ios的自定义toast。

    说明:

    一,使用的Androidstudio版本为3.4

    二,使用说明。直接增加依赖。然后看本文第二大条。

    allprojects {
            repositories {
                ...
                maven { url 'https://jitpack.io' }
            }
        }
    
    dependencies {
                implementation 'com.github.mamumu:mmToast:1.0'
        }
    

    展示效果:

    https://img.haomeiwen.com/i14906070/1057492c91998df2.gif?imageMogr2/auto-orient/strip

    现在正式开始

    1,核心activity和对应的布局文件。

    package com.mumu.toast;
    
    import android.content.Context;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    /**
     * @author : zlf
     * date    : 2019-04-18
     * github  : https://github.com/mamumu
     * blog    : https://www.jianshu.com/u/281e9668a5a6
     */
    public class MMToast extends Toast {
    
        public MMToast(Context context) {
            super(context);
        }
    
        public static class Builder {
            private Context context;
            private String message;
            private boolean isSuccess = true;
    
            public Builder(Context context) {
                this.context = context;
            }
    
            /**
             * 设置toast的内容
             *
             * @param message
             * @return
             */
            public Builder setMessage(String message) {
                this.message = message;
                return this;
            }
    
            /**
             * 是否是显示成功的toast,true:成功 false:失败
             *
             * @param isSuccess
             * @return
             */
            public Builder setSuccess(boolean isSuccess) {
                this.isSuccess = isSuccess;
                return this;
            }
    
            public MMToast create() {
                LayoutInflater inflater = LayoutInflater.from(context);
                View view = inflater.inflate(R.layout.dialog_toast, null);
                MMToast mmToast = new MMToast(context);
                TextView msgText = view.findViewById(R.id.t_text);
                ImageView imageView = view.findViewById(R.id.t_image);
                if (!message.isEmpty()) {
                    msgText.setText(message);
                }
                if (isSuccess) {
                    imageView.setImageResource(R.drawable.ic_success);
                } else {
                    imageView.setImageResource(R.drawable.ic_failure);
                }
    
                mmToast.setView(view);
                mmToast.setDuration(Toast.LENGTH_SHORT);
                mmToast.setGravity(Gravity.CENTER,0,0);
                return mmToast;
            }
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/dialog_loading_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="70dp"
            android:background="@drawable/shape_bg"
            android:gravity="center"
            android:orientation="vertical"
            android:minWidth="80dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:paddingRight="5dp"
            android:paddingBottom="5dp">
    
            <ImageView
                android:id="@+id/t_image"
                android:layout_width="30dp"
                android:layout_height="30dp" />
    
            <TextView
                android:id="@+id/t_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="加载成功"
                android:textColor="#ffffff"
                android:textSize="14sp" />
        </LinearLayout>
    
    </LinearLayout>
    

    2,如何使用。一,直接在自己的BaseActivity中增加showToastSuccess()和showToastFailure()方法。如下第一段代码所示。二,MainActivity继承BaseActivity,直接使用对应的方法。

    package com.mumu.mmtoast.base;
    
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    
    import com.mumu.toast.MMToast;
    
    
    /**
     * @author : zlf
     * date    : 2019/4/17
     * github  : https://github.com/mamumu
     * blog    : https://www.jianshu.com/u/281e9668a5a6
     */
    public class BaseActivity extends AppCompatActivity {
    
        private MMToast mmToast;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
        }
    
        protected void showToastSuccess(String msg) {
            if (mmToast == null) {
                MMToast.Builder builder=new MMToast.Builder(this)
                        .setMessage(msg)
                        .setSuccess(true);
                mmToast=builder.create();
            }else {
                mmToast.cancel();
                MMToast.Builder builder=new MMToast.Builder(this)
                        .setMessage(msg)
                        .setSuccess(true);
                mmToast=builder.create();
            }
            mmToast.show();
        }
    
        protected void showToastFailure(String msg) {
            if (mmToast == null) {
                MMToast.Builder builder=new MMToast.Builder(this)
                        .setMessage(msg)
                        .setSuccess(false);
                mmToast=builder.create();
            }else {
                mmToast.cancel();
                MMToast.Builder builder=new MMToast.Builder(this)
                        .setMessage(msg)
                        .setSuccess(false);
                mmToast=builder.create();
            }
            mmToast.show();
        }
    }
    
    package com.mumu.mmtoast;
    
    import android.os.Bundle;
    import android.view.View;
    
    import com.mumu.mmtoast.base.BaseActivity;
    
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    
    public class MainActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
            initView();
        }
    
        private void initView() {
        }
    
        @OnClick({R.id.button3, R.id.button4})
        public void onViewClicked(View view) {
            switch (view.getId()) {
                case R.id.button3:
                    showToastSuccess("加载成功");
                    break;
                case R.id.button4:
                    showToastFailure("加载失败");
                    break;
            }
        }
    }
    

    3,对应github地址

    demo地址:https://github.com/mamumu/mmToast

    4,我后面将dialog(一),loading(二)和toast(三)做了统一封装链接如下,推荐使用:

    https://www.jianshu.com/p/9259ad7f857b

    如果有发现错误欢迎指正我及时修改,如果有好的建议欢迎留言。如果觉得对你有帮助欢迎给小星星,谢谢。

    相关文章

      网友评论

        本文标题:Android自定义仿ios的toast提示(三)

        本文链接:https://www.haomeiwen.com/subject/bwetgqtx.html