项目中遇到一个只需输入密码验证的功能,新手遇到了对话框点击空白消失,点击按钮无论对错均消失,<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" >