<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文件里获取的,关于如何获取可以用下面代码实现:
二、view. Window .setContentView( View view)。主要代码如下:LayoutInflater inflater =LayoutInflater.from(Context context);View view = inflater.inflate(R.layout.alertdialog,null);//这里的R.layout.alertdialog即为你自定义的布局文件
关于两者的区别,大家可以看这个链接: http://www.x2x1.com/show/6040883.aspxAlertDialog mAlertDialog = builder.create();mAlertDialog.show();mAlertDialog.getWindow().setContentView(view);
通过设置; 可以看到上下明显的黑边不在了,但是四周仍然有个黑框,依然影响整体美观。
大致就是setView()只会覆盖AlertDialog的Title与Button之间的那部分(会出现黑色的边框),而setContentView()则会覆盖全部。
还有一点要注意的是:
setContentView()必须放在show()的后面,不然会报错
。如果你要在代码里修改AlertDialog的大小,可以用以下代码实现:
mAlertDialog.getWindow().setLayout(150, 320);但是这段代码同样需要放在 show()的后面,不然你的改动会没有效果。