android之AlertDialog

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);//点击窗口外不取消窗口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值