AlertDialogテキスト内容の色を変更
2410 ワード
最近、レノボA 858 Tの白い携帯電話で次のようなAlertDialogをテストしたとき、AlertDialogの背景はデフォルトで白で、title、messageは黒だったが、CheckBoxのTextは白だった.
したがって、AlertDialogのtitle色値を反射法で読み取ってCheckBoxのTextColorに付与できるかどうかを考え、関連するAlertControllerクラスをネット上で見つけた.このクラスはAlertDialogの実装クラスであり、公開されていない.そして、このクラスにmTitleViewというプライベートメンバー変数があり、これがAlertDialogのtitleのTextViewであるため、このメンバー変数の例を得る限り、titleの色値が得られます
チェックボックスのText色を変更するのと同じように、AlertDialogのtitleフォントの色を直接変更することもできます.setTextColor(XXXXX)
final CheckBox cb = new CheckBox(this);
cb.setChecked(false);
cb.setText(getResources().getString(R.string.close_wifi_switch));
dialog = new AlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.exit_wimo_sure))
.setView(cb)
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// Do nothing.
}
})
.setPositiveButton(R.string.exit,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).create();
dialog.show();
したがって、AlertDialogのtitle色値を反射法で読み取ってCheckBoxのTextColorに付与できるかどうかを考え、関連するAlertControllerクラスをネット上で見つけた.このクラスはAlertDialogの実装クラスであり、公開されていない.そして、このクラスにmTitleViewというプライベートメンバー変数があり、これがAlertDialogのtitleのTextViewであるため、このメンバー変数の例を得る限り、titleの色値が得られます
dialog.show();// ,
try {
Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
mAlert.setAccessible(true);
Object alertController = mAlert.get(dialog);
Field mTitleView = alertController.getClass().getDeclaredField(
"mTitleView");
mTitleView.setAccessible(true);
TextView title = (TextView) mTitleView.get(alertController);
ColorStateList colorStateList = title.getTextColors();
cb.setTextColor(colorStateList);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
チェックボックスのText色を変更するのと同じように、AlertDialogのtitleフォントの色を直接変更することもできます.setTextColor(XXXXX)