美文网首页
封装了一个dialogfragment工具

封装了一个dialogfragment工具

作者: _周小二 | 来源:发表于2019-02-21 17:18 被阅读0次

    dialogfragment 代替dilog的好处就不说了

    /**
     * 基础DialogFragment
     * 主要是封装了一些基础的参数
     * 也可以根据自己的项目添加公有参数
     */
     public FragmentActivity mActivity;
    
        public abstract int getLayoutId();
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            mActivity = (FragmentActivity) context;
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            //无标题
            getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
            //设置背景透明
            getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            View view = inflater.inflate(getLayoutId(), container);
            return view;
        }
    
    
        @Override
        public void onStart() {
            super.onStart();
    
            Window window = getDialog().getWindow();
            if (window != null) {
                //设置窗体背景色透明
                window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                //设置宽高
                WindowManager.LayoutParams layoutParams = window.getAttributes();
                DisplayMetrics dm = new DisplayMetrics();
                getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
                layoutParams.width = (int) (dm.widthPixels * 0.75);
                layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
                window.setAttributes(layoutParams);
            }
        }
    
    
    
    
    
    
    /**
     * 用于dialog创建view后 将我view回传到当前activity 或者fragment中
     */
    public interface BaseDialogListener {
    
        void onDialogStart(BaseDialog dialog ,View view);
    }
    
    **
     * 一个正常的dialog 
     */
    public class NormalDialog extends BaseDialog {
    
        public TextView mTitleTv;
        public TextView mContentTv;
        public Button mCancelBtn;
        public Button mOkBtn;
        private BaseDialogListener mListenerDialog;
    
        @Override
        public int getLayoutId() {
            return R.layout.normal_dialog;
        }
    
        public static NormalDialog newInstance() {
            Bundle args = new Bundle();
            NormalDialog fragment = new NormalDialog();
            fragment.setArguments(args);
            return fragment;
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            Log.e(TAG, "text123 onViewCreated: ");
            mTitleTv = view.findViewById(R.id.normal_dialog_title_tv);
            mContentTv = view.findViewById(R.id.normal_dialog_content_tv);
            mCancelBtn = view.findViewById(R.id.normal_dialog_cancel_btn);
            mOkBtn = view.findViewById(R.id.normal_dialog_ok_btn);
            if (mListenerDialog!=null) {
                mListenerDialog.onDialogStart(NormalDialog.this,view);
            }
            mCancelBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    NormalDialog.this.dismiss();
                }
            });
        }
    
        public void addClickListener(BaseDialogListener listenerDialog) {
            mListenerDialog = listenerDialog;
        }
    
    
        @Override
        public void onStart() {
            super.onStart();
            this.getDialog().setCancelable(false);
            this.getDialog().setCanceledOnTouchOutside(false);
        }
    
     * dialog 管理者
     * 还可以添加其他功能
     */
    public class DialogManager {
        private BaseDialog mDialog;
        private FragmentActivity mActivity;
    
        public DialogManager Builder(BaseDialog dialog) {
            Log.e(TAG, "Builder: ");
            mDialog = dialog;
            return this;
        }
    
        public DialogManager setContext(FragmentActivity activity) {
            mActivity = activity;
            return this;
        }
    
    
    
        public void show(String tag) {
    
            if (mActivity == null) {
                Log.e(TAG, "show: mActivity == null");
                return;
            }
            FragmentManager supportFragmentManager = mActivity.getSupportFragmentManager();
            mDialog.show(supportFragmentManager, tag);
        }
    
    
        public void dismiss() {
            if (mDialog != null) {
                mDialog.dismiss();
            }
        }
    
    }
    
    
    /**+
     * 基础使用
     */
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            DialogManager dialogManager = new DialogManager();
            NormalDialog normalDialog = NormalDialog.newInstance();
            normalDialog.addClickListener(mSetDialogListener);
            dialogManager.Builder(normalDialog).setContext(this).show("text");
        }
    
        BaseDialogListener mSetDialogListener = new BaseDialogListener() {
            @Override
            public void onDialogStart(BaseDialog dialog, View view) {
                final NormalDialog mDialog = (NormalDialog) dialog;
                mDialog.mTitleTv.setText("text123");
                mDialog.mContentTv.setText("我是内容");
                mDialog.mOkBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mDialog.mContentTv.setText("我是内容 text123");
                    }
                });
            }
        };
    }
    
    

    最后除去 normalDialog还可以自定义其他dialog 比如waitDiaglog 只要集成baseDialog就可以了

    相关文章

      网友评论

          本文标题:封装了一个dialogfragment工具

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