I have a popup for downloading the audio instruction in my app. What I am trying to do is to change the default text color of "OK" to blue. I tried something but it's not working. Here is my code:
private void showDownloadPgmPopup() {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());
builder.setTitle("Download instructional audio?");
builder.setMessage(ParamConstants.AUDIODOWNLOADPERMISSION);
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WwDatabaseHelper.storeSelectedWeekAndDay(getActivity(), mSelectedWeekDataModel);
goToMoveScreen();
}
});
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AndroidDownloadFileByProgressBarActivity.StartAudioAssetDownload(getActivity());
}
}).create();
// change the text color of download instruction ok button
final android.app.AlertDialog dialog = builder.show();
dialog.setOnShowListener( new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface arg0) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#ff5722"));
}
});
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
But the change is not taking effect, can anyone tell me what I am doing wrong?
You can just create a style and apply that theme on the dialog box. So whenever you want to change the color of AlertDialog box, just change color in styles. xml and all the dialog boxes will be updated in the whole application.
AlertDialog is a lightweight version of a Dialog. This is supposed to deal with INFORMATIVE matters only, That's the reason why complex interactions with the user are limited. Dialog on the other hand is able to do even more complex things .
You have to provide a custom style id in the AlertDialog constructor:
AlertDialog.Builder(Context context, int themeResId)
and the style file should be something like:
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:colorAccent">#0000FF</item>
</style>
Change your method to
private void showDownloadPgmPopup() {
android.app.AlertDialog.Builder builder = new android.app
.AlertDialog.Builder(getActivity(),R.style.AlertDialog);
...
..
.
}
And under res/values/styles.xml add a new AlertDialog style
<style name="AlertDialog" parent="Base.Theme.AppCompat.Light.Dialog">
<item name="android:textColor">#000000</item>
<item name="android:textColorPrimary">#595959</item>
<item name="android:colorAccent">#1b5e20</item>
</style>
Below is the screen shot of these changes
Try calling the setTextColor
after show
. Refer below:
show()
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.YELLOW)
You have two ways to do this
- Override default dialog.
//1. create a dialog object 'dialog'
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Exit", errorMessage);
AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
...
}
}).create();
//2. now setup to change color of the button
dialog.setOnShowListener( new OnShowListener() {
@Override
public void onShow(DialogInterface arg0) {
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#f34235"));
}
}
dialog.show()
- Create your own
custom
dialog
// create instance of dialog
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// get inflater and inflate layour for dialogue
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_label_editor, null);
// now set layout to dialog
dialogBuilder.setView(dialogView);
// create instance like this OR directly mentioned in layout
Button button= (Button) dialogView.findViewById(R.id.label_field);
button.setText("test label");
AlertDialog alertDialog = dialogBuilder.create();
// show dialog
alertDialog.show();
With the Material Components library just define a custom style using the buttonBarPositiveButtonStyle
attribute:
<!-- Alert Dialog -->
<style name="MaterialAlertDialog_OK_color" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<!-- Style for positive button -->
<item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle.textColor</item>
</style>
<style name="PositiveButtonStyle.textColor" parent="@style/Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">@color/......</item>
</style>
Then:
new MaterialAlertDialogBuilder(context,
R.style.MaterialAlertDialog_OK_color)
.setMessage("Message......")
.setPositiveButton("ok", null)
.setNegativeButton("Cancel", null)
.show();
I could manage to change the text color to Red by using SpannableString in place of normal string.
Example -
var okString = new SpannableString("OK");
okString.SetSpan(new ForegroundColorSpan(Color.Red), 0, Strings.Report.Length, 0);
I then passed the variable okString to setItems().
Try passing spannableString to setPositiveButton().
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.YELLOW)
The above code didn't work for me, but the below one did work:
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.Yellow));
Simply, you just change your "OK" text with this code:
Html.fromHtml("<font color='#0000FF'>OK</font>")
This code will totally change your text color depend on your added color value while #0000FF is blue.
Here's how you can use MaterialAlertDialogBuilder
to show and customise your AlertDialog.
If you want more details, should definitely check out here. https://www.journaldev.com/309/android-alert-dialog-using-kotlin
val builder = MaterialAlertDialogBuilder(requireContext())
with(builder) {
setTitle(R.string.log_out)
setMessage(R.string.dialog_msg_logout)
setPositiveButton(R.string.confirm) { _, _ ->
logoutUser()
}
setNegativeButton(R.string.cancel, null)
}
val dialog = builder.create()
dialog.show()
val button = dialog.getButton(DialogInterface.BUTTON_POSITIVE)
with(button) {
setTextColor(ContextCompat.getColor(requireContext(), R.color.colorAccent))
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With