Android 简单对话框

项目中遇到一个只需输入密码验证的功能,新手遇到了对话框点击空白消失,点击按钮无论对错均消失,<span style="font-family: Arial, Helvetica, sans-serif;">setError的信息无法显示等问题,解决后做以记录!</span><span style="font-family: Arial, Helvetica, sans-serif;">	</span>



new AlertDialog.Builder(SettingMainActivity.this).setTitle(getResources().getString(R.string.title_Password)).setCancelable(false)//点击空白处不消失
						.setIcon(android.R.drawable.ic_dialog_info).setView(pwdEditText)
						.setPositiveButton(getResources().getString(R.string.btnOk), new DialogInterface.OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog, int which) {
								String pwd = pwdEditText.getText().toString().trim();
								if (pwd.length() > 0) {
									if (pwd.equals("123456")) {
										
										try {//瞒天过海
											Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
											field.setAccessible(true);
											field.set(dialog, true);
										} catch (NoSuchFieldException e) {
											e.printStackTrace();
										} catch (IllegalArgumentException e) {
											e.printStackTrace();
										} catch (IllegalAccessException e) {
											e.printStackTrace();
										}
										Intent it = new Intent(SettingMainActivity.this, BatterySelectActivity.class);
										startActivity(it);
									} else {

										try {
											pwdEditText.setError(getResources().getString(R.string.Password_Error));
//											pwdEditText.setError(Html.fromHtml("Password Error"));
//											Toast.makeText(SettingMainActivity.this, "Password Error", Toast.LENGTH_LONG).show();
											Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
											field.setAccessible(true);
											field.set(dialog, false);
										} catch (NoSuchFieldException e) {
											e.printStackTrace();
										} catch (IllegalArgumentException e) {
											e.printStackTrace();
										} catch (IllegalAccessException e) {
											e.printStackTrace();
										}
									}
								}else{	//null
									try {
										pwdEditText.setError(getResources().getString(R.string.Password_Error));
//										pwdEditText.setError(Html.fromHtml("Password Error"));
//										Toast.makeText(SettingMainActivity.this, "Password Error", Toast.LENGTH_LONG).show();
										Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
										field.setAccessible(true);
										field.set(dialog, false);
									} catch (NoSuchFieldException e) {
										e.printStackTrace();
									} catch (IllegalArgumentException e) {
										e.printStackTrace();
									} catch (IllegalAccessException e) {
										e.printStackTrace();
									}
								}
							}
						})
						.setNegativeButton(getResources().getString(R.string.btnCancel), 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);
								} catch (NoSuchFieldException e) {
									e.printStackTrace();
								} catch (IllegalArgumentException e) {
									e.printStackTrace();
								} catch (IllegalAccessException e) {
									e.printStackTrace();
								}
							}
						}).show();
另外关于 setError不显示问题,处理方法为在values/styles:修改默认字体颜色

<style name="AppTheme" parent="android:Theme.Light">
        <item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item>
</style>

然后再manifest文件中调用

<application
        android:theme="@style/AppTheme" >



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值