1. 程式人生 > >Android Alertdialog彈出框設定半透明背景

Android Alertdialog彈出框設定半透明背景

自定義AlertDialog基本步驟:

1.寫一個layout佈局,使用inflater生成對應view物件

2.新建AlertDialog.Builder物件builder

3.builder設定自定義佈局view,從view中獲取各控制元件,設定對應業務邏輯

4.builder.create()生成AlertDialog物件,dialog.show()顯示彈窗

以上基礎方法中,若想給view設定圓角、半透明背景,發現效果不正常:半透明背景顯示無透明度,圓角顯示外層有尖角輪廓

解決方式:

以上步驟中,自定義的layout佈局可以不設定指定背景,等dialog生成後,show之前,給dialog設定半透明或圓角等

關鍵方法:dialog.getWindow().setBackGroundDrawableResource(背景資原始檔);
View createView = inflater.inflate(R.layout.dialog_create_msg_layout, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setView(createView);
        final AlertDialog dialog = builder.create();
        dialog.getWindow().setBackgroundDrawableResource(R.drawable.fg1_msgdialog_background);
//        取消、確定按鈕textview
        TextView tvCancel = (TextView) createView.findViewById(R.id.fg1_create_msg_dialog_tv_cancel);
        TextView tvConfirm = (TextView) createView.findViewById(R.id.fg1_create_msg_dialog_tv_confirm);
        final EditText etMsg = (EditText) createView.findViewById(R.id.fg1_create_msg_dialog_et);
        tvCancel.setOnClickListener(listener);
        tvConfirm.setOnClickListener(listener);
//        編輯留言-取消
        tvCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
//        編輯留言-傳送
        tvConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String homeMessageStr = etMsg.getText().toString();
                if (null == homeMessageStr || homeMessageStr.equals("")) {
                    toastUser("您還沒有填寫任何內容!");
                    return;
                }
                Params.deviceController.sendHomeMessage(homeMessageStr);
                dialog.dismiss();
            }
        });
        dialog.show();

效果: