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

前言

相信大家在做项目的时候,都会用到一些提示网络状况,是否更新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,今天的内容就讲到这里啦,谢谢诶

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,432评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,573评论 0 17
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,752评论 4 61
  • 2017年11月27日感恩分享第439天: 【座右铭】 “我是一切的源头!” “相信就有奇迹!” 健康拍打第155...
    three胡阅读 524评论 0 0
  • 实践是检验真理的唯一标准。饮食起居正确与否,好和坏,如何简单判断,检验? 我们生病了,尤其慢性病,现在都往往不会向...
    zhaodongbo阅读 212评论 0 0

友情链接更多精彩内容