如何避免设备字体大小对Xamarin Android应用程序的影响?

7
如果我更改设备字体,那么我的应用程序字体也会随之更改。我不想根据设备字体更改我的应用程序字体。
所以我搜索了一下,发现了Dimension
请告诉我如何在Xamarin中为Android使用dp。还建议我任何其他适当的方法来解决这个问题。

1
"任何其他适当的解决方法" - 允许您的字体根据系统字体大小进行调整。用户表示“我想要更大的字体”(或可能是“我想要更小的字体”)。您试图阻止这一点,告诉用户您不在乎用户想要什么。反过来,用户可能不会很喜欢您的应用程序。 - CommonsWare
是的,我同意你的看法。我只想为某些条目防止字体大小改变。所以我在寻找这个功能。 - Uddhao Pachrne
这里是关于UpdateConfiguration被弃用的信息。 - Robbit
4个回答

12

Robbit的回答是正确的,但Resources.UpdateConfiguration()已经被弃用。因此,目前应该这样做:

public override Resources Resources 
{
    get
    {
        var config = new Configuration();
        config.SetToDefaults();

        return CreateConfigurationContext(config).Resources;
    }
}

这会导致应用在方向更改时由于空引用而崩溃! - user193679

8
在您的活动中,添加以下内容:
public override Resources Resources {
    get
    {
        Resources res = base.Resources;
        Configuration config = new Configuration();
        config.SetToDefaults();
        res.UpdateConfiguration(config, res.DisplayMetrics);
        return res;
    }

}

非常感谢。有关iOS的等效信息?可能在AppDelegate中吗? - jtth
@jtth - 在我的经验中,这在任何iOS设备上都不是问题。您认为iOS会有字体大小变化吗? - Abhijith C R
@jtth 你可能已经找到了,但是iOS的等效属性是在应用程序上设置的平台特定属性,称为EnableAccessibilityScalingForNamedFontSizes。https://learn.microsoft.com/en-gb/xamarin/xamarin-forms/platform/ios/named-font-size-scaling - greg84

8

我使用了Rafael的答案,但是当我尝试设置Application.Current.MainPage时出现了以下错误:

二进制XML文件第1行:膨胀类<unknown>的错误

我通过以下方法解决了这个问题:

public override Android.Content.Res.Resources Resources
{
    get
    {
        var config = base.Resources.Configuration;
        if (config == null)
            config = new Configuration();
        config.FontScale = 1f;
        return CreateConfigurationContext(config).Resources;
    }
}

完美!最好检查配置实例。 - Chandan Y S

3
在Xamarin.Forms Android MainActivity.cs中,重写Resources并将配置设置为默认值以限制字体大小对应用程序的影响。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
public override Resources Resources
        {
            get
            {
                Resources resource = base.Resources;
                Configuration configuration = new Configuration();
                configuration.SetToDefaults();
                if (Build.VERSION.SdkInt >= Build.VERSION_CODES.NMr1)
                {
                    return CreateConfigurationContext(configuration).Resources;
                }
                else
                {
                    resource.UpdateConfiguration(configuration, resource.DisplayMetrics);
                    return resource;
                }
            }
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接