• DialogFragment方便地完成自定义弹窗


    当采用popupWindow或是dialog无法达到预期的效果时,可以考虑使用
    popupWindow要考虑解决穿透,点击窗体外还有效果。
    AlertDialog无法直接达到要求,
    
    DialogFragment可以帮助我们非常方便地完成自定义弹窗,直接设置定义的view,满中如下
    1、点击弹窗外不允许编辑
    2、点击弹窗外不消失
    Demo如下:
    public class Fragment extends DialogFragment
      {
    
        private TextView tvCancel, tvSure, tvTitle, tvContent;
        private BackUpListener backUpListener;
    
        private View.OnClickListener onClickListen = new View.OnClickListener()
          {
            @Override
            public void onClick(View v)
              {
    }         
     
          };
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState)
          {
            super.onCreate(savedInstanceState);
          }
    
        @Override
        public void onStart()
          {
            super.onStart();
            initWindowParams();
          }
    
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
          {
            View contentView = inflater.inflate(R.layout.fragment_show_autobackup_dialog, container, false);
            initView(contentView);
            initData();
            return contentView;
          }
    
        private void initView(View contentView)
          {
     
            tvSure = contentView.findViewById(R.id.tv_sure);
    
          }
    
        private void initData()
          {
     
            tvCancel.setOnClickListener(onClickListen);
            tvSure.setOnClickListener(onClickListen);
          }
    
        private void initWindowParams()
          {
            Window window = getDialog().getWindow();
            window.setGravity(Gravity.CENTER);   // 这里控制弹出的位置
            window.getDecorView().setPadding(0, 0, 0, 0);
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            window.setDimAmount(0.2f);
            WindowManager.LayoutParams lp = window.getAttributes();
            DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            lp.width = Math.max((int) (320 * displayMetrics.density), displayMetrics.widthPixels / 2);
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            //点击事件是否穿透 dialog
            //        lp.flags = lp.flags | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
            //按空白处不能取消动画
            getDialog().setCanceledOnTouchOutside(false);
            window.setAttributes(lp);
            window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
            window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
            window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
            getDialog().setOnKeyListener(new DialogInterface.OnKeyListener()
              {
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
                  {
                    if (keyCode == KeyEvent.KEYCODE_BACK)
                      {
                        return true;
                      }
                    return false;
                  }
              });
    
          }
    
        @Override
        public void show(FragmentManager manager, String tag)
          {
            //        super.show(manager, tag);
            FragmentTransaction ft = manager.beginTransaction();
            ft.add(this, tag);
            ft.commitAllowingStateLoss();
          }
    
        public void setAutoBackUpListener(BackUpListener backUpListener)
          {
            this.backUpListener = backUpListener;
          }
    
        public interface BackUpListener
          {
            void BackUpListener();
          }
    
      }
    
  • 相关阅读:
    线段树基本原理和操作
    Vue+Node的校内闲置物品回收管理系统毕业设计-附源码140933
    【数据结构】二叉树
    PS制作文字扫光gif
    CSS处理器-Less/Scss
    qt中加载qss样式不生效的问题
    sass和scss 有何区别?
    【EPLAN】统一修改项目中字体大小
    如何在已有的vue项目里面使用electron? (普通项目转成桌面端应用)
    ToBeWritten之VSOC安全运营
  • 原文地址:https://blog.csdn.net/blog_yue/article/details/126873467