前言
相信大家在做项目的时候,都会用到一些提示网络状况,是否更新app啊啥的需要与用户进行互动的提示框。我们希望能有一个统一的提示框dialog,能英应对各种app中需要的一般性提示。当然,我在DialogFragment(二)——创建默认dialogFragment一文中已经实现了提示框的统一性,但其自由与可控性还不够,于是我写了一个新的dialogFragment--------SyDialogFragment。
今天涉及到的知识有:
- SyDialogFragment特性
- SyDialogFragment代码
- SyDialogFragment的使用
一.SyDialogFragment特性
SyDialogFragment具备以下特征:
- 可设置dialog是否可点击返回键消失
- 可设置dialog是否可点击屏幕消失
- 当然是具备设置dialog大小的,但由于不想破坏其在app中统一性,于是固定大小了
- 可设置dialog背景色
- 可设置dialog标题栏的显示和隐藏
- 可设置dialog标题栏文字内容
- 可设置标题栏文字大小,颜色
- 可设置Content区文字内容
- 可设置Content区文字大小,颜色
- 可设置确认按钮的显示和隐藏
- 可设置确认按钮的文字内容,文字大小和文字颜色
- 可设置确认按钮的点击事件
- 可设置取消按钮的显示和隐藏
- 可设置取消按钮的文字内容,文字大小和文字颜色
- 可设置取消按钮的点击事件
二.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:
*
* 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布局代码
四.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使用注意事项
- setCancel(false)和setCancelOnTouchOutside(false)为SyDialogFragment父类方法,返回的是AppDialogFragment,所以SyDialogFragment在调用设置属性的时候,先调SyDialogFragment中的方法,最后设置setCancel,setCancelOnTouchOutside和showDialog
- SyDialogFragment默认不显示CancelBtn和ConfirmBtn,只有当你设置了setConfirmBtn方法后才会显示ConfirmBtn,CancelBtn同理
- 当只需要显示一个按钮的时候,不应该设置setConfirmBtn方法(避免布局错位),而应该设置setCancelBtn方法,并在setCancelBtn方法中去执行你的操作
五.SyDialogFragment使用效果图
ok,今天的内容就讲到这里啦,谢谢诶