Setting a custom font for Monotouch-dialog elements

4.2k Views Asked by At

Is there a way to set the fonts when a Monotouch Dialog class has been instansiated?

[Section("This is the header")]

This will render with the default blue text with drop shadow, but I can't find where that font is being set. Is there a way to overwrite which font and color it uses?

2

There are 2 best solutions below

0
On BEST ANSWER

I found a solution for those looking to replace ALL section headers in the entire solution. In MonoTouch.Dialog, there is a class named DialogViewController which is used when creating views with the reflection API. And in here, there's a method called GetViewForHeader(). Instead of sending back just the normal section.HeaderView, you can create a custom label and send that back.

public override UIView GetViewForHeader (UITableView tableView, int sectionIdx)
{
    var section = Root.Sections [sectionIdx];
    if (!string.IsNullOrEmpty(section.Caption))
    {
        var label = new UILabel();
        label.BackgroundColor = UIColor.FromRGB(89, 41, 17);
        label.TextColor = UIColor.FromRGB(255, 206, 52);
        label.ShadowColor = UIColor.Black;
        label.ShadowOffset = new SizeF(0, 1f);
        label.Font = UIFont.FromName("TitlingGothicFB Cond", 20);

        label.Text = section.Caption;

        return label;
    }
    return section.HeaderView;
}

public override float GetHeightForHeader (UITableView tableView, int sectionIdx)
{
    if (!string.IsNullOrEmpty(section.Caption))
        return 40f;
    return -1;
}

Remember to set the height, either manually or by getting the height from the label. You can also create a custom UIView, but a label was sufficient for me.

2
On

When you use the Section like that you will use the UITableView standard rendering.

The only way to change that is to use the Element API instead of the reflection API, and provide a UIView where you draw the contents of the data yourself.