1.继承AlertDialog的样式
2.自定义标题
3.自定义内容View,包含输入框。
4.点击窗口外不取消窗口.点击返回取消窗口。
5.点击确定按钮校验失败不取消窗口,因为输入文字很多,如果自动取消用户体验很差。校验成功取消窗口。
6.对比dialog也能实现上述要求,不过需要重写所有界面。
View view = inflate(getContext(), R.layout.view_edit, null);
final EditText et_content = (EditText) view
.findViewById(R.id.et_content);
final String plan = getResources()
.getString(R.string.plan_postscript_default);
et_content.setText(StateManager.getInstance(getContext()).getString(
StateManager.CUSTOMER_CLOUD_PLAN_POSTSCRIPT, plan));
Editable b = et_content.getText();
et_content.setSelection(b.length());//光标移动到最后
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
TextView tv_title = new TextView(getContext());
tv_title.setText(getResources().getString(
R.string.title_plan_postscript));
tv_title.setGravity(Gravity.CENTER);
tv_title.setTextSize(18);
tv_title.setTextColor(Color.parseColor("#0098ff"));
tv_title.setHeight(UIHelper.dip2px(getContext(), 60));
builder.setCustomTitle(tv_title);// 设置自定义布局的标题
builder.setView(view);
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
Field field = dialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true); // true -
} catch (Exception e) {
e.printStackTrace();
}
}
});
builder.setPositiveButton(
new String("保存"), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String content = et_content.getText().toString();
if (!validatyLength(content)) {
// 条件不成立不能关闭 AlertDialog 窗口
UIHelper.makeToast(getContext(), "文字长度不能大于200字");
try {
Field field = dialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false); // false -// 使之不能关闭(此为机关所在,其它语句相同)
} catch (Exception e) {
e.printStackTrace();
}
} else {
// 条件成立能关闭 AlertDialog 窗口
StateManager.getInstance(getContext()).setString(
StateManager.CUSTOMER_CLOUD_PLAN_POSTSCRIPT, content);
tv_setting_product_recommend.setText(content);
if (content == null || content.isEmpty()) {
tv_setting_product_recommend.setVisibility(View.GONE);
} else {
tv_setting_product_recommend
.setVisibility(View.VISIBLE);
}
try {
Field field = dialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true); // true -// 使之可以关闭(此为机关所在,其它语句相同)
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
builder.show().setCanceledOnTouchOutside(false);//点击窗口外不取消窗口