安卓Dialog封装

来源:互联网 发布:网络之大神我只是路过 编辑:程序博客网 时间:2024/06/10 17:01

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

 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 {//Dialogprivate 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/9boolean 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
原创粉丝点击