安卓Dialog封装

安卓项目中常用到对话框的显示,用来提示一些信息或者是需要输入信息接收的,因此进行了一次简单的封装,后续大家可以在次基础上进行扩展~~

 package com.iven.app.view;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.iven.app.R;

import static android.R.attr.gravity;

/**
 * @author Iven
 * @date 2017/1/2 13:31
 * @Description 统一的Dialog封装
 */

public class DialogUtils {
//Dialog
private Dialog mDialog;
private Context context;
private boolean isCancelable;//是否可以取消
private DialogClickListener eventListener;// 按钮点击回调
/**
 * 显示文本相关
 */
private String title = "";// 标题
private String content = "";// 内容
private String leftText = "";// 左按钮显示的文字
private String rightText = "";// 右按钮显示的文字
private TextView dialog_textView_title, dialog_textView_content, dialog_textView_left, dialog_textView_right, dialog_textView_segment;
private LinearLayout dialog_layout_button;
private String hint;
private String tip;
// TODO: 2017/1/9
boolean isBold = false;//字体是否加粗
//是否显示左侧的图标
private boolean isShowDrawable;
private int leftDdrawable = 0;
private int rightDdrawable = 0;
private int imgId;//设置图片


private int leftColor = -1;
private int rightColor = -1;

private Handler mHandler;
private EditText et_alias;


public DialogUtils(Context context, boolean isCancelable) {
    this.context = context;
    this.isCancelable = isCancelable;
    leftColor = -1;
    rightColor = -1;
}

/**
 * @param context       context
 * @param isCancelable  true=可取消
 * @param eventListener 监听
 */
public DialogUtils(Context context, boolean isCancelable, DialogClickListener eventListener) {
    this.context = context;
    this.isCancelable = isCancelable;
    this.eventListener = eventListener;
}

/**
 * @param context        context
 * @param title          标题
 * @param content        描述内容
 * @param leftText       左侧按钮文字
 * @param rightText      右侧按钮文字
 * @param isShowDrawable 是否显示对号图片
 * @param handler        Handler
 * @param eventListener  监听
 * @param tip            提示信息
 */
public void setDialogVerify(Context context, String title, String content, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, DialogClickListener eventListener) {
    this.context = context;
    this.title = title;
    this.content = content;
    this.leftText = leftText;
    this.rightText = rightText;
    this.tip = tip;
    this.isShowDrawable = isShowDrawable;
    this.eventListener = eventListener;
    this.mHandler = handler;
}

public void setDialogVerify(Context context, String title, String content, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, boolean isBold, DialogClickListener eventListener) {
    this.context = context;
    this.title = title;
    this.content = content;
    this.leftText = leftText;
    this.rightText = rightText;
    this.tip = tip;
    this.isShowDrawable = isShowDrawable;
    this.eventListener = eventListener;
    this.mHandler = handler;
    this.isBold = isBold;
}

/**
 * 带有EditText的
 */
public void setDialogVerify(Context context, String title, String content, String hint, String leftText, String rightText, String tip, boolean isShowDrawable, Handler handler, DialogClickListener eventListener) {
    this.context = context;
    this.title = title;
    this.content = content;
    this.hint = hint;
    this.leftText = leftText;
    this.rightText = rightText;
    this.tip = tip;
    this.isShowDrawable = isShowDrawable;
    this.eventListener = eventListener;
    this.mHandler = handler;
}

/**
 * 显示dialog
 *
 * @param
 */
public void showStandardDialog() {
    showDialog(Gravity.CENTER);
}

/**
 * 显示提示信息的Dialog
 */

private void showDialog(int center) {
    try {
        if (mDialog != null) {
            mDialog.cancel();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    DialogInterface.OnKeyListener keyListener = new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            return keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_SEARCH;
        }
    };
    try {
        View view = View.inflate(context, R.layout.common_dialog, null);
        dialog_textView_title = (TextView) view.findViewById(R.id.dialog_textView_title);//标题
        dialog_textView_content = (TextView) view.findViewById(R.id.dialog_textView_content);//内容
        dialog_textView_left = (TextView) view.findViewById(R.id.dialog_textView_left);//左按钮
        dialog_textView_right = (TextView) view.findViewById(R.id.dialog_textView_right);//右按钮
        dialog_layout_button = (LinearLayout) view.findViewById(R.id.dialog_layout_button);//按钮栏
        dialog_textView_segment = (TextView) view.findViewById(R.id.dialog_textView_segment);//按钮之间分割线

        if (isBold) {//粗体字
            dialog_textView_title.getPaint().setFakeBoldText(true);//标题
            dialog_textView_content.getPaint().setFakeBoldText(true);//内容
            dialog_textView_left.getPaint().setFakeBoldText(true);
            dialog_textView_right.getPaint().setFakeBoldText(true);
        }
        //标题
        if (!TextUtils.isEmpty(title)) {
            dialog_textView_title.setText(title);
        } else {
            dialog_textView_title.setVisibility(View.GONE);
        }
        //内容
        if (null == content || "".equals(content)) {
            dialog_textView_content.setVisibility(View.GONE);
        } else {
            dialog_textView_content.setGravity(gravity);
            dialog_textView_content.setText(content);
        }
        //隐藏按钮栏
        if ((null == leftText || "".equals(leftText)) && (null == rightText || "".equals(rightText))) {
            dialog_layout_button.setVisibility(View.GONE);
        }

        setTextColor(dialog_textView_left, dialog_textView_right);

        if (null == leftText || "".equals(leftText)) {
            dialog_textView_left.setVisibility(View.GONE);
            dialog_textView_segment.setVisibility(View.GONE);
        } else {
            dialog_textView_left.setText(leftText);
        }
        if (null == rightText || "".equals(rightText)) {
            dialog_textView_right.setVisibility(View.GONE);
            dialog_textView_segment.setVisibility(View.GONE);
        } else {
            dialog_textView_right.setText(rightText);
        }

        dialog_textView_left.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog_textView_right.setOnClickListener(null);
                eventListener.leftEvent();
            }
        });
        dialog_textView_right.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog_textView_left.setOnClickListener(null);
                eventListener.rightEvent();
            }
        });
        mDialog = new Dialog(context, R.style.dialog_background_dimEnabled);//添加相应的样式
        mDialog.setContentView(view);//设置显示的布局文件
        /** 将对话框的大小按屏幕大小的百分比设置 **/
        resetDialogSize();


        mDialog.setCancelable(isCancelable);
        mDialog.setCanceledOnTouchOutside(isCancelable);
        if (!isCancelable) {
            mDialog.setOnKeyListener(keyListener);
        }
        mDialog.show();
    } catch (Exception e) {
        Log.e("exception", "e==== " + e);
    }
}

/**
 * 显示EditText的Dialog
 */
public void showAliasDialog() {
    try {
        if (mDialog != null) {
            mDialog.cancel();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    View view = View.inflate(context, R.layout.dialog_edittext, null);
    TextView tv_title = (TextView) view.findViewById(R.id.dialog_tv_title);
    et_alias = (EditText) view.findViewById(R.id.dialog_et_alias);
    final TextView tv_left_ok = (TextView) view.findViewById(R.id.dialog_tv_left);
    TextView tv_right_skip = (TextView) view.findViewById(R.id.dialog_tv_right);

    setTextColor(tv_left_ok, tv_right_skip);

    /** 添加监听 */
    et_alias.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if (s.length() > 0) {
                tv_left_ok.setClickable(true);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            String s1 = s.toString();

        }
    });

    /** 左侧确定按钮点击事件 */
    tv_left_ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Message message = new Message();
            message.what = 0;
            message.obj = et_alias.getText().toString();
            if (mHandler != null) {
                mHandler.sendMessage(message);
            }
            if (eventListener != null) {
                eventListener.leftEvent();
            }
        }
    });
    /** 右侧确定按钮点击事件 */
    tv_right_skip.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (eventListener != null) {
                eventListener.rightEvent();
            }
        }
    });


    mDialog = new Dialog(context, R.style.dialog_background_dimEnabled);
    mDialog.setContentView(view);
    Window dialogWindow = mDialog.getWindow();
    dialogWindow.setGravity(Gravity.CENTER);
    resetDialogSize();
    mDialog.setCancelable(isCancelable);
    mDialog.setCanceledOnTouchOutside(isCancelable);
    mDialog.show();
}

/**
 * 获取edittext输入的内容
 */
public String getEdittextContent() {
    if (et_alias != null) {
        Editable text = et_alias.getText();
        if (text != null) {
            return text.toString();
        } else
            return "";
    } else {
        return "";
    }
}

/**
 * 显示dialog
 *
 * @param contentGravity 显示内容gravity
 */
public void showStandardDialog(int contentGravity) {
    showDialog(contentGravity);
}

/**
 * 重置dialog的大小及位置
 */
private void resetDialogSize() {
    Window dialogWindow = mDialog.getWindow();
    dialogWindow.setGravity(Gravity.CENTER);
    /*
     * 将对话框的大小按屏幕大小的百分比设置
     */
    WindowManager m = dialogWindow.getWindowManager();
    Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
    WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
    // p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6
    p.width = (int) (d.getWidth() * 0.75); // 宽度设置为屏幕的0.65
    p.height = WindowManager.LayoutParams.WRAP_CONTENT;
    dialogWindow.setAttributes(p);
}

/**
 * 给两个按钮设置颜色
 *
 * @param leftText  左
 * @param rightText 右
 */
private void setTextColor(TextView leftText, TextView rightText) {
    if (leftColor != -1) {
        leftText.setTextColor(leftColor);
    }
    if (rightColor != -1) {
        rightText.setTextColor(rightColor);
    }
}

/**
 * 关闭dialog
 *
 * @param
 */
public void closeDilog() {
    if (mDialog != null) {
        try {
            mDialog.dismiss();
            mDialog = null;
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

public interface DialogClickListener {

    /**
     * 左按钮点击事件
     */
    void leftEvent();

    /**
     * 右按钮点击事件
     */
    void rightEvent();
}
}

Style样式:

<!-- dialog 样式  activity变暗 -->
<style name="dialog_background_dimEnabled" parent="@android:style/Theme.Dialog">
    <item name="android:backgroundDimEnabled">true</item>
    <!-- activity 变暗 dd-->
    <item name="android:windowIsFloating">true</item>
    <!-- 是否浮现在activity之上 -->
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <!-- 半透明 -->
    <item name="android:textColor">@color/color_black</item>
</style>

<style name="gray_text_middle">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">@dimen/normal_font</item>
    <item name="android:textColor">@color/color_grays</item>
</style>

<style name="textViewNoPadding">
    <item name="android:lineSpacingMultiplier">0.9</item>
    <item name="android:includeFontPadding">false</item>
</style>

涉及到的文字以及颜色,自行设定就好~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值