简单快捷的自定义 Dialog

之前的一篇博客里面提到了自定义 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值