美文网首页Android开发经验谈Android开发程序员
DialogFragment(四)——自定义通用dialogFr

DialogFragment(四)——自定义通用dialogFr

作者: 奔跑的佩恩 | 来源:发表于2017-12-27 10:47 被阅读763次

    前言

    相信大家在做项目的时候,都会用到一些提示网络状况,是否更新app啊啥的需要与用户进行互动的提示框。我们希望能有一个统一的提示框dialog,能英应对各种app中需要的一般性提示。当然,我在DialogFragment(二)——创建默认dialogFragment一文中已经实现了提示框的统一性,但其自由与可控性还不够,于是我写了一个新的dialogFragment--------SyDialogFragment。

    今天涉及到的知识有:

    • SyDialogFragment特性
    • SyDialogFragment代码
    • SyDialogFragment的使用
    一.SyDialogFragment特性

    SyDialogFragment具备以下特征:

    1. 可设置dialog是否可点击返回键消失
    2. 可设置dialog是否可点击屏幕消失
    3. 当然是具备设置dialog大小的,但由于不想破坏其在app中统一性,于是固定大小了
    4. 可设置dialog背景色
    5. 可设置dialog标题栏的显示和隐藏
    6. 可设置dialog标题栏文字内容
    7. 可设置标题栏文字大小,颜色
    8. 可设置Content区文字内容
    9. 可设置Content区文字大小,颜色
    10. 可设置确认按钮的显示和隐藏
    11. 可设置确认按钮的文字内容,文字大小和文字颜色
    12. 可设置确认按钮的点击事件
    13. 可设置取消按钮的显示和隐藏
    14. 可设置取消按钮的文字内容,文字大小和文字颜色
    15. 可设置取消按钮的点击事件
    二.SyDialogFragment代码

    由于SyDialogFragment具备超级灵活性,故其来自于自定义DialogFragment,所以需要继承父类AppDialogFragment,AppDialogFragment在上一节已经讲过了,这里就不赘述了,下面直接上SyDialogFragment代码:

    package com.dialogfragmentdemo;
    
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.dialogfragmentdemo.base.AppDialogFragment;
    import com.dialogfragmentdemo.util.LogUtil;
    
    import butterknife.BindView;
    
    /**
     * Title:自定义通用dialogFragment,继承于AppDialogFragment
     * Description:
     * <p>
     * Created by pei
     * Date: 2017/12/26
     */
    public class SyDialogFragment extends AppDialogFragment {
    
        @BindView(R.id.tv_title)
        TextView mTvTitle;
        @BindView(R.id.tv_content)
        TextView mTvContent;
        @BindView(R.id.btn_confirm)
        Button mBtnConfirm;
        @BindView(R.id.btn_cancel)
        Button mBtnCancel;
    
        private int mBackGroundColor=R.color.white;//默认dialog背景色
        private boolean isTitle=true;//默认有标题栏
        private String mTitleText;//默认标题栏文字在xml中设置
        private int mTitleTextColor= super.RID;//默认标题栏文字颜色在xml中设置
        private float mTitleTextSize=super.RID;//默认标题栏文字大小在xml中设置
        private String mContentText;//默认内容区文字在xml中设置
        private int mContentTextColor=super.RID;//默认内容区文字颜色在xml中设置
        private float mContentTextSize=super.RID;//默认内容区文字大小在xml中设置
        private String mConfirmText;//默认确认按钮文字在xml中设置
        private int mConfirmTextColor=super.RID;//默认确认按钮文字颜色在xml中设置
        private float mConfirmTextSize=super.RID;//默认确认按钮文字大小在xml中设置
        private String mCancelText;//默认取消按钮文字在xml中设置
        private int mCancelTextColor=super.RID;//默认取消按钮文字颜色在xml中设置
        private float mCancelTextSize=super.RID;//默认取消按钮文字大小在xml中设置
    
        private boolean isConfirmBtn;//默认不显示确认按钮
        private boolean isCancelBtn;//默认不显示取消按钮
    
        private View.OnClickListener mOnConfirmClickListener;
        private View.OnClickListener mOnCancelClickListener;
    
    
        @Override
        protected double[] getWindowSize() {
            return new double[]{0.9,0.28};
        }
    
        @Override
        protected int getLayoutId() {
            return R.layout.dialog_fragment_sy;
        }
    
        @Override
        protected void initData() {
            LogUtil.e(SyDialogFragment.class,"=======我是标题栏啊=====");
            //设置默认背景色
            super.mBackGroundId=mBackGroundColor;
            super.setBackGroundId(mBackGroundId);
            //标题栏显隐
            if(!isTitle){
                mTvTitle.setVisibility(View.GONE);
            }
            //设置标题栏文字
            if(mTitleText!=null){
                mTvTitle.setText(mTitleText);
            }
            //标题栏文字颜色
            if(mTitleTextColor!=super.RID){
                mTvTitle.setTextColor(mContext.getResources().getColor(mTitleTextColor));
            }
            //设置标题栏文字大小
            if(mTitleTextSize!=super.RID){
                mTvTitle.setTextSize(mTitleTextSize);
            }
            //设置内容区文字
            if(mContentText!=null){
                mTvContent.setText(mContentText);
            }
            //内容区文字颜色
            if(mContentTextColor!=super.RID){
                mTvContent.setTextColor(mContext.getResources().getColor(mContentTextColor));
            }
            //内容区文字大小
            if(mContentTextSize!=super.RID){
                mTvContent.setTextSize(mContentTextSize);
            }
            //设置确认按钮文字
            if(mConfirmText!=null){
                mBtnConfirm.setText(mConfirmText);
            }
            //设置确认按钮文字颜色
            if(mConfirmTextColor!=super.RID){
                mBtnConfirm.setTextColor(mContext.getResources().getColor(mConfirmTextColor));
            }
            //设置确认按钮文字大小
            if(mConfirmTextSize!=super.RID){
                mBtnConfirm.setTextSize(mConfirmTextSize);
            }
            //设置取消按钮文字
            if(mCancelText!=null){
                mBtnCancel.setText(mCancelText);
            }
            //设置取消按钮文字颜色
            if(mCancelTextColor!=super.RID){
                mBtnCancel.setTextColor(mContext.getResources().getColor(mCancelTextColor));
            }
            //设置取消按钮文字大小
            if(mCancelTextSize!=super.RID){
                mBtnCancel.setTextSize(mCancelTextSize);
            }
            //确认按钮显隐
            if(isConfirmBtn){
                mBtnConfirm.setVisibility(View.VISIBLE);
            }else{
                mBtnConfirm.setVisibility(View.GONE);
            }
            //取消按钮显隐
            if(isCancelBtn){
                mBtnCancel.setVisibility(View.VISIBLE);
            }else{
                mBtnCancel.setVisibility(View.GONE);
            }
    
        }
    
        @Override
        protected void setListener(){
             if(mBtnConfirm.getVisibility()==View.VISIBLE){
                 mBtnConfirm.setOnClickListener(this);
             }
            if(mBtnCancel.getVisibility()==View.VISIBLE){
                mBtnCancel.setOnClickListener(this);
            }
        }
    
        @Override
        public void onClick(View v) {
            super.onClick(v);
            switch (v.getId()) {
                case R.id.btn_confirm:
                    if(mOnConfirmClickListener!=null){
                        mOnConfirmClickListener.onClick(v);
                    }
                    break;
                case R.id.btn_cancel:
                    if(mOnCancelClickListener!=null){
                        mOnCancelClickListener.onClick(v);
                    }
                    break;
                default:
                    break;
            }
        }
    
        /**设置dialog背景色**/
        public SyDialogFragment setBackGroundColor(int color){
            this.mBackGroundColor=color;
            return this;
        }
    
        /**设置标题栏**/
        public SyDialogFragment setTitle(boolean isTitle){
            this.isTitle=isTitle;
            return this;
        }
    
        /**设置标题栏文字**/
        public SyDialogFragment setTitleText(String message){
            this.mTitleText=message;
            return this;
        }
    
        /**设置标题栏文字颜色**/
        public SyDialogFragment setTitleTextColor(int color){
            this.mTitleTextColor=color;
            return this;
        }
    
        /**设置标题栏文字大小**/
        public SyDialogFragment setTitleTextSize(float size){
            this.mTitleTextSize=size;
            return this;
        }
    
        /**设置内容区文字**/
        public SyDialogFragment setMesssageText(String message){
            this.mContentText=message;
            return this;
        }
    
        /**设置内容区文字颜色**/
        public SyDialogFragment setMesssageTextColor(int color){
            this.mContentTextColor=color;
            return this;
        }
    
        /**设置内容区文字大小**/
        public SyDialogFragment setMesssageTextSize(float size){
            this.mContentTextSize=size;
            return this;
        }
    
        /**确认点击事件**/
        public SyDialogFragment setConfirmBtn(View.OnClickListener onClickListener){
            isConfirmBtn=true;
            this.mOnConfirmClickListener=onClickListener;
            return this;
        }
    
        /**确认点击事件,可设置文字**/
        public SyDialogFragment setConfirmBtn(String text,View.OnClickListener onClickListener){
            this.mConfirmText=text;
            setConfirmBtn(onClickListener);
            return this;
        }
    
        /**设置确认按钮文字颜色**/
        public SyDialogFragment setConfirmTextColor(int color){
            this.mConfirmTextColor=color;
            return this;
        }
    
        /**设置确认按钮文字大小**/
        public SyDialogFragment setConfirmTextSize(float size){
            this.mConfirmTextSize=size;
            return this;
        }
    
        /**取消点击事件**/
        public SyDialogFragment setCancelBtn(View.OnClickListener onClickListener){
            isCancelBtn=true;
            this.mOnCancelClickListener=onClickListener;
            return this;
        }
    
        /**取消点击事件,可设置文字**/
        public SyDialogFragment setCancelBtn(String text,View.OnClickListener onClickListener){
            this.mCancelText=text;
            setCancelBtn(onClickListener);
            return this;
        }
    
        /**设置取消按钮文字颜色**/
        public SyDialogFragment setCancelTextColor(int color){
            this.mCancelTextColor=color;
            return this;
        }
    
        /**设置确认按钮文字大小**/
        public SyDialogFragment setCancelTextSize(float size){
            this.mCancelTextSize=size;
            return this;
        }
    
    }
    
    
    三.SyDialogFragment对应的dialog_fragment_sy.xml布局代码
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:bao="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:gravity="center"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:gravity="center_vertical"
            android:maxLines="1"
            android:minHeight="50dp"
            android:singleLine="true"
            android:text="提示"
            android:textColor="#000000"
            android:textSize="14sp" />
    
        <TextView
            android:id="@+id/tv_content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1.0"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:text="提示"
            android:textColor="#666666"
            android:textSize="12sp" />
    
        <RelativeLayout
            android:id="@+id/rl_btn"
            android:layout_width="match_parent"
            android:layout_height="50dp">
    
            <Button
                android:id="@+id/btn_confirm"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_toLeftOf="@+id/btn_cancel"
                android:background="@color/transparent"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:gravity="center"
                android:text="确定"
                android:textColor="#68c81c"
                android:textSize="14sp"/>
    
            <Button
                android:id="@+id/btn_cancel"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:background="@color/transparent"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:gravity="center"
                android:text="取消"
                android:textColor="#68c81c"
                android:textSize="14sp"/>
    
        </RelativeLayout>
    
    
    
    </LinearLayout>
    
    
    
    四.SyDialogFragment在MainActivity中的运用

    以下为示例代码,大家可以根据实际情况酌情设置

    //在MainActivity中声明对象
    private SyDialogFragment mSyDialogFragment;
    

    在要使用的地方调用:

    mSyDialogFragment=new SyDialogFragment();
    
    mSyDialogFragment.setBackGroundColor(R.color.white)//默认背景白色,在SyDialogFragment中设置
                     .setTitle(true)//默认显示标题栏
                     .setTitleText("申请")//默认显示"提示",在xml中设置
                     .setTitleTextColor(R.color.blue)//默认黑色,在xml中设置
                     .setTitleTextSize(18f)//默认14sp,在xml中设置
                     .setMesssageText("你确定退出吗?")//默认显示"提示",在xml中设置
                     .setMesssageTextColor(R.color.black)//默认#666666,在xml中设置
                     .setMesssageTextSize(15f)//默认12sp,在xml中设置
                     .setCancelTextColor(R.color.color_1f1b24)//默认#68c81c,在xml中设置
                     .setCancelTextSize(16f)//默认14sp,在xml中设置
                     .setCancelBtn("cancel", new View.OnClickListener() {
                               @Override
                                public void onClick(View v) {//默认文字为“取消”,在xml中设置
                                    ToastUtil.shortShow("取消");
                                    mSyDialogFragment.dismiss();
                                }
                            })
                     .setConfirmTextColor(R.color.red)//默认#68c81c,在xml中设置
                     .setConfirmTextSize(16f)//默认14sp,在xml中设置
                     .setConfirmBtn("ok", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {//默认文字为“确定”,在xml中设置
                                    ToastUtil.shortShow("确认");
                                    mSyDialogFragment.dismiss();
                                }
                            })
                     .(false)//默认true
                     .setCancelOnTouchOutside(false)//默认true
                     .showDialog(getSupportFragmentManager());
    
    
    四.SyDialogFragment使用注意事项
    1. setCancel(false)和setCancelOnTouchOutside(false)为SyDialogFragment父类方法,返回的是AppDialogFragment,所以SyDialogFragment在调用设置属性的时候,先调SyDialogFragment中的方法,最后设置setCancel,setCancelOnTouchOutside和showDialog
    2. SyDialogFragment默认不显示CancelBtn和ConfirmBtn,只有当你设置了setConfirmBtn方法后才会显示ConfirmBtn,CancelBtn同理
    3. 当只需要显示一个按钮的时候,不应该设置setConfirmBtn方法(避免布局错位),而应该设置setCancelBtn方法,并在setCancelBtn方法中去执行你的操作
    五.SyDialogFragment使用效果图
    2.gif

    ok,今天的内容就讲到这里啦,谢谢诶

    相关文章

      网友评论

        本文标题:DialogFragment(四)——自定义通用dialogFr

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