我无法弄清楚如何更改选择首选项时弹出的警报对话框的分隔颜色。我知道可以通过实现扩展AlertDialog的自定义类并在show()方法中执行以下操作:
int dividerId = getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(dividerId);
divider.setBackgroundColor(themeColor);
但是,不知道如何强制PreferenceFragment中出现的警告对话框来扩展我的自定义AlertDialog。
我也可以使用样式来修改PreferenceFragment中AlertDialog的外观,但是没有与AlertDialogs的分隔颜色对应的样式属性(因此必须实现查找分隔符视图的黑客)。
有没有人知道如何在不实现自己的PreferenceFragment的情况下实现这一目标?
我的应用程序的基本主题是Theme.AppCompat。
答案 0 :(得分:2)
这完全是为了改变AlertDialog中的颜色:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Test Title");
builder.setMessage(Html.fromHtml("<font color='#FF7F27'>This is a test</font>"));
builder.setCancelable(false);
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
try {
Resources resources = dialog.getContext().getResources();
int alertTitleId = resources.getIdentifier("alertTitle", "id", "android");
TextView alertTitle = (TextView) dialog.getWindow().getDecorView().findViewById(alertTitleId);
alertTitle.setTextColor(Color.MAGENTA); // change title text color
int titleDividerId = resources.getIdentifier("titleDivider", "id", "android");
View titleDivider = dialog.getWindow().getDecorView().findViewById(titleDividerId);
titleDivider.setBackgroundColor(Color.YELLOW); // change divider color
} catch (Exception ex) {
ex.printStackTrace();
}
Button nbutton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
//Set negative button background
nbutton.setBackgroundColor(Color.MAGENTA);
//Set negative button text color
nbutton.setTextColor(Color.YELLOW);
Button pbutton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
//Set positive button background
pbutton.setBackgroundColor(Color.YELLOW);
//Set positive button text color
pbutton.setTextColor(Color.MAGENTA);
这是我的示例代码,但是如果要更改分隔符颜色,请考虑代码的一部分以“int titleDividerId”开头。我希望它有所帮助。
结果: