防止显示大小更改设置影响应用程序设计- Xamarin.forms



我有xamarin。当用户在android的辅助设置中更改设备字体大小时,我的应用程序设计就会混乱。我有能力阻止。现在我面临的问题是,当用户在android的设置中改变显示尺寸时,我的设计又扭曲了。我该如何预防呢?如有任何帮助,不胜感激。

我有xamarin。当用户在android的辅助设置中更改设备字体大小时,我的应用程序设计就会混乱。我有能力阻止。现在我面临的问题是,当用户在android的设置中改变显示尺寸时,我的设计又扭曲了。我该如何预防呢?如有任何帮助,不胜感激。

您可以在Mainactivity.cs中尝试以下代码:

private void initFontScale()
{
Configuration configuration = Resources.Configuration;
configuration.FontScale = (float)1;
//0.85 small, 1 standard, 1.15 big,1.3 more bigger ,1.45 supper big 
DisplayMetrics metrics = new DisplayMetrics();
WindowManager.DefaultDisplay.GetMetrics(metrics);
metrics.ScaledDensity = configuration.FontScale * metrics.Density;
//BaseContext.Resources.UpdateConfiguration(configuration, metrics);
BaseContext.ApplicationContext.CreateConfigurationContext(configuration); 
BaseContext.Resources.DisplayMetrics.SetTo(metrics);
}
protected override void OnCreate(Bundle savedInstanceState)
{
initFontScale();
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

base.OnCreate(savedInstanceState);
...
LoadApplication(new App());
}

你也可以尝试覆盖attachBaseContext方法:

protected override void AttachBaseContext(Context @base)
{
Configuration overrideConfiguration = new Configuration();
overrideConfiguration = @base.Resources.Configuration;
overrideConfiguration.SetToDefaults();
var fontScale = overrideConfiguration.FontScale;
overrideConfiguration.FontScale = (float)1;
Context context = @base.CreateConfigurationContext(overrideConfiguration);
base.AttachBaseContext(context);
}

我想分享我对同样问题的解决方案,希望能对别人有所帮助。

private void InitFontScale() 
{
Configuration configuration = Resources.Configuration;
configuration.FontScale = (float) 1;
//0.85 small, 1 standard, 1.15 big,1.3 more bigger ,1.45 supper big 
DisplayMetrics metrics = new DisplayMetrics();
WindowManager.DefaultDisplay.GetMetrics(metrics);

//I added the next lines to keep the density.

metrics.Density = configuration.FontScale * (DisplayMetrics.DensityDeviceStable / 160 f);
metrics.ScaledDensity = metrics.Density;
configuration.DensityDpi = (int) DisplayMetrics.DensityDeviceStable;
metrics.DensityDpi = (DisplayMetricsDensity) DisplayMetrics.DensityDeviceStable;

BaseContext.ApplicationContext.CreateConfigurationContext(configuration);
BaseContext.Resources.DisplayMetrics.SetTo(metrics);
}

相关内容

最新更新