Toast提示 AppCompatDialogFragment 实现

641 阅读1分钟

Toast 不支持自定义,各种限制。直接DialogFragment 实现 啰嗦 上代码 `

import android.app.Dialog;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDialogFragment;
import androidx.fragment.app.FragmentManager;
import com.example.wakuang.R;
import com.example.wakuang.databinding.DialogMessageBinding;


public class MessageDialog extends AppCompatDialogFragment {
    private DialogMessageBinding binding;
    private Handler handler ;

    public MessageDialog(String msg) {
        this.msg = msg;
    }

    private String msg;



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = DialogMessageBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }


    @Override
    public void onViewCreated(@NonNull  View view, @Nullable  Bundle savedInstanceState) {
        binding.msg.setText(msg);
        handler=new Handler(requireActivity().getMainLooper()){
            @Override
            public void handleMessage(@NonNull Message msg) {
               switch (msg.what){
                   case 1:
                       if(getDialog()!=null&&getDialog().isShowing()){
                           dismiss();
                       }
                       break;
               }
            }
        };
        handler.sendEmptyMessageDelayed(1,1500);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Window window = getDialog().getWindow();
        window.setGravity(Gravity.TOP);
        window.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.lucency)));
        // window.setWindowAnimations(R.style.animate_dialog);
        WindowManager.LayoutParams windowParams = window.getAttributes();
        windowParams.dimAmount = 0.0f;
        windowParams.y = 300;//我这儿直接写死了,你自己看着办吧
        window.setAttributes(windowParams);
        Dialog dialog = getDialog();
        if (dialog != null) {
            DisplayMetrics dm = new DisplayMetrics();
            requireActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
            dialog.getWindow().setAttributes(lp);
        }

    }

    @Override
    public void show(FragmentManager manager, String tag) {
        try {
            //在每个add事务前增加一个remove事务,防止连续的add
            manager.beginTransaction().remove(this).commit();
            super.show(manager, tag);
        } catch (Exception e) {
            //同一实例使用不同的tag会异常,这里捕获一下
            e.printStackTrace();
        }
    }

}

binding是viewBinding,官方的

buildFeatures {
    viewBinding true
}