AlertDialog自定义样式问题

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">现象: 当新建一个自定义的Dialog后,显示的效果大相径庭,有一个黑框在对话框的周围</span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);"></span><pre name="code" class="html">   /**
     * 通用对话框
     *
     * @param context
     * @param content      提示内容
     * @param changeOk     改变确定按钮信息
     * @param changeCancle 改变取消按钮信息
     * @param flag     true 显示单选框 false 不显示
     */
    protected void myConfirmDialog(Context context, String content, String changeOk, String changeCancle,boolean flag) {
        sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
        et = sharedPreferences.edit();
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        confirmDialog = builder.create(); // 创建对话框好控制,比如调用dimiss()方法。
        confirmDialog.setCanceledOnTouchOutside(false);//外围点击无效
        View dialogView = View.inflate(this, R.layout.confirm_dialog, null);
      <span style="color:#ff0000;">  confirmDialog.show();
        confirmDialog.getWindow().setContentView(dialogView);</span>

        tv_dialog_content = (TextView) dialogView.findViewById(R.id.tv_dialog_content);
        bt_ok = (Button) dialogView.findViewById(R.id.bt_ok);
        bt_cancel = (Button) dialogView.findViewById(R.id.bt_cancel);
        final CheckBox ck_state= (CheckBox) dialogView.findViewById(R.id.ck_state);

        tv_dialog_content.setText(content);
        bt_ok.setText(changeOk);
        bt_cancel.setText(changeCancle);

        boolean isCheckedState= sharedPreferences.getBoolean(Constant.ISCHECKSTATE, false);
        if (flag){
            ck_state.setVisibility(View.VISIBLE);
            /**获取开关蓝牙状态 改变单选框选中状态*/
            if (isCheckedState){
                ck_state.setChecked(isCheckedState);
            }else{
                ck_state.setChecked(isCheckedState);
            }
        //CheckBox点击事件
            ck_state.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    et.putBoolean(Constant.ISCHECKSTATE,isChecked);
                    et.commit();
                }
            });
        }
        bt_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doWork();
                confirmDialog.dismiss();
            }
        });
        bt_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ck_state.setChecked(false);
                confirmDialog.dismiss();
            }
        });
    }


 


  关于如何自定义AlertDialog样式:
       一、AlertDialog.Builder.setView(View view)。这个view是事先从定义好的XML文件里获取的,关于如何获取可以用下面代码实现:

LayoutInflater inflater =LayoutInflater.from(Context context);View view = inflater.inflate(R.layout.alertdialog,null);//这里的R.layout.alertdialog即为你自定义的布局文件

       二、view. Window  .setContentView( View   view)。主要代码如下:

AlertDialog mAlertDialog = builder.create();mAlertDialog.show();mAlertDialog.getWindow().setContentView(view);

  关于两者的区别,大家可以看这个链接:  http://www.x2x1.com/show/6040883.aspx

通过设置;
可以看到上下明显的黑边不在了,但是四周仍然有个黑框,依然影响整体美观。
      大致就是setView()只会覆盖AlertDialog的Title与Button之间的那部分(会出现黑色的边框),而setContentView()则会覆盖全部。
      还有一点要注意的是: setContentView()必须放在show()的后面,不然会报错 。如果你要在代码里修改AlertDialog的大小,可以用以下代码实现:
 
  
mAlertDialog.getWindow().setLayout(150, 320);
      但是这段代码同样需要放在  show()的后面,不然你的改动会没有效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值