简单快捷的自定义 Dialog

来源:互联网 发布:淘宝的淘友能看到什么 编辑:程序博客网 时间:2024/05/20 14:42

之前的一篇博客里面提到了自定义 Dialog ,然而在项目中一般不会用到那种写法。
下面整理一个平时常用的 自定义 Dialog ,方便后面项目开发中使用。
效果图:
自定义 Dialog

code :

public void showFeedBackDialog() {        View view = LayoutInflater.from(this).inflate(R.layout.dialog_setting, null);        TextView title = V.find(view, R.id.tv_title);        TextView content = V.find(view, R.id.tv_content);        final EditText et_content = V.find(view, R.id.et_content);        TextView cancel = V.find(view, R.id.tv_cancel);        TextView confirm = V.find(view, R.id.tv_confirm);        title.setText(getString(R.string.feedback));        content.setVisibility(View.GONE);        et_content.setVisibility(View.VISIBLE);        et_content.setHint(getString(R.string.feedback_hint));        confirm.setText(getString(R.string.commit));        final Dialog dialog = new Dialog(this, R.style.style_loading_dialog);        dialog.setContentView(view);        // 点击外部是否可取消 Dialog         dialog.setCanceledOnTouchOutside(false);        // 点击返回按钮是否能取消 Dialog        dialog.setCancelable(false);        cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialog.dismiss();            }        });        confirm.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (et_content.getText().toString().length() <= 0) {                    toast("请输入反馈内容");                    return;                }                client.FEEDBACK(mToken, et_content.getText().toString());                // TODO 点击提交按钮                dialog.dismiss();            }        });        Display dm = getWindowManager().getDefaultDisplay();        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();        lp.width = (int) (dm.getWidth() * 0.7);        dialog.getWindow().setAttributes(lp);        dialog.show();    }

上面是根据所占屏幕的比例来设置 Diaolog 的宽度,如果需要根据设计图所给定的大小来设置,可以使用下面这种方式:

DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();lp.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 210, dm);lp.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 148, dm);dialog.getWindow().setAttributes(lp);

创建 Dialog 的样式我这边也直接贴出来:

<!--Dialog 样式--><style name="style_loading_dialog" parent="android:style/Theme.Dialog">    <item name="android:windowFrame">@null</item>    <item name="android:windowNoTitle">true</item>    <item name="android:windowBackground">@android:color/transparent</item>    <item name="android:windowIsFloating">true</item>    <item name="android:windowContentOverlay">@null</item></style>

界面布局这里就不贴了,只是作为一个常用功能整理。

再次简化一下 Dialog 的创建:

/**     * 创建 Dialog     *     * @param context     * @param view    布局视图     * @param scale   宽度比例     * @return     */    public static Dialog createDialog(Context context, View view, float scale) {        final Dialog dialog = new Dialog(context, R.style.style_loading_light_dialog);        dialog.setContentView(view);        dialog.setCancelable(true);        dialog.setCanceledOnTouchOutside(true);        Display dm = ((Activity) context).getWindowManager().getDefaultDisplay();        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();        lp.width = (int) (dm.getWidth() * scale);        dialog.getWindow().setAttributes(lp);        dialog.show();        return dialog;    }

使用:

public static void uploadFailedAlert(Context context, final View.OnClickListener clickListener) {        View view = LayoutInflater.from(context).inflate(R.layout.dialog_upload_failed, null);        final Dialog dialog = createDialog(context, view, 0.7f);        V.find(view, R.id.tv_cancel).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dialog.dismiss();                if (clickListener != null) {                    clickListener.onClick(v);                }            }        });    }
1 1