Highlight with bold a concatenated item

1

I would like to highlight in bold a part of the text that is in the DisplayAlert notification.

DisplayAlert("Alerta", "Deseja realmente incluir o lance de valor de R$ " + EntryLance.Text + "?", "Sim", "Não");

Obs : If you can give me an example in C # it will already be of great value.

    
asked by anonymous 04.10.2018 / 19:41

1 answer

1

I think you will not be able to put details of a RichText in DisplayAlert of Xamarim.

In SOen there is a very similar question, but it was italic, and the answer was to create a custom alert control that supports RichText (italic + bold).

Transcribing the solution given in this question:

void PromptRichTextPopup(string title, string richMessage, string normalMessage, Action onOkCallback, Action onCancel = null) 
{
    var vc = UIKit.UIApplication.SharedApplication.KeyWindow.RootViewController;

    // take top presented view controller
    while (vc.PresentedViewController != null) 
        vc = vc.PresentedViewController;

    var alertvc = UIAlertController.Create(title, string.Empty, UIAlertControllerStyle.Alert);
    var leftAligned = new NSMutableParagraphStyle();

    leftAligned.Alignment = UITextAlignment.Left;

    var colorTitle = new NSAttributedString(str: title, font: UIFont.BoldSystemFontOfSize(18), foregroundColor: Xamarin.Forms.Color.FromHex("#61acad").ToUIColor());

    alertvc.SetValueForKey(colorTitle, new NSString("attributedTitle"));

    var margin = 5f;
    var height = 30f;
    var width = 256f;

    var container = new UIView(new CGRect(margin, margin, width, height * 4));

    var message = new NSMutableAttributedString(str: richMessage, font: UIFont.ItalicSystemFontOfSize(14), foregroundColor: UIColor.Black);

    message.Append(new NSMutableAttributedString(str: " " + normalMessage, font: UIFont.SystemFontOfSize(14), foregroundColor: UIColor.Black));

    var lblText = new UILabel(new CGRect(0, -(height / 2), width, height * 2)) { AttributedText = message };

    lblText.LineBreakMode = UILineBreakMode.WordWrap;
    lblText.Lines = 0;

    container.AddSubview(lblText);

    var cancel = new UIButton(new CGRect(0, height, width / 2, height * 2));

    cancel.SetTitle("NO", UIControlState.Normal);
    cancel.AddTarget((sender, e) => alertvc.DismissViewController(true, null), UIControlEvent.TouchUpInside);
    cancel.SetTitleColor(UIColor.Blue, UIControlState.Normal);

    if (onCancel != null) 
    {
        cancel.AddTarget((sender, e) => 
        {
            onCancel();
        },
        UIControlEvent.TouchUpInside);
    }
    ~
    container.AddSubview(cancel);

    var ok = new UIButton(new CGRect(width / 2, height, width / 2, height * 2));

    ok.SetTitle("YES", UIControlState.Normal);

    Action okAction = async () => 
    {
        ok.Enabled = false;
        await uiHelper.RunBlocking(() => 
        {
            onOkCallback();
        });
        alertvc.DismissViewController(true, null);
    };

    ok.SetTitleColor(UIColor.Blue, UIControlState.Normal);

    container.AddSubview(ok);

    ok.AddTarget((sender, e) => 
    {
        okAction();
    }, UIControlEvent.TouchUpInside);

    var controller = new UIViewController();

    controller.View.AddSubview(container);

    alertvc.SetValueForKey(controller, new NSString("contentViewController"));

    vc.PresentViewController(alertvc, true, null);
}

Original issue in SOen : Xamarin.Forms - DisplayAlert with Italic font attribute

    
04.10.2018 / 19:48