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
}