gpt4 book ai didi

android - 设备显示设置(Android 屏幕缩放和字体)

转载 作者:行者123 更新时间:2023-11-28 23:34:45 24 4
gpt4 key购买 nike

我的任务是在我们现有的 IOS 应用程序的同时完成一个 Andoid 应用程序。Android 的项目框架已经存在,我只需要填补空白,使其与 IOS 版本同步。

我一直在通过自己的手机进行测试,并且一直在为我的 Galaxy S6 上的字体太大而苦苦挣扎。现在我才意识到这是由于我设备上的实际 Zomm 和字体显示设置所致(我的眼睛不是最好的)。

我的问题是,是否可以从我的设备中检索这些缩放设置,以便我可以相应地调整字体等?

Xamarin 还很陌生,但我已经到了那里 - 希望您能提供一些指导,帮助我走得更远。

最佳答案

众所周知,dp和px的换算公式:px = dp * 密度

可见,如果设计宽度为360dp,我们要想保证所有设备计算出来的px值正好是屏幕的宽度,就只能修改密度的值。

通过阅读源代码和official document ,我们可以看到密度是DisplayMetrics中的成员变量,并且DisplayMetrics实例可以通过Resources#getDisplayMetrics获取,并且>资源是通过Activity或Application Context获取的。

我们可以熟悉以下与 DisplayMetrics 中和适配相关的变量:

  • DisplayMetrics#密度是上面的密度
  • DisplayMetrics#密度Dpi 是上面的 dpi
  • DisplayMetrics#scaledDensity 字体的缩放系数,即等于正常条件下的密度,但会改变这一点调整系统字体大小后的值。

解决方案:

以下假设设计图宽度为360dp,并适配宽尺寸。

那么适配后的密度=设备真实宽度(单位px)/360,那么我们只需要在系统中修改我们计算出的密度即可,代码实现如下:

private static void setCustomDensity( Activity activity,Application application)
{
DisplayMetrics appDisplaymetrics = application.Resources.DisplayMetrics;
float targetDensity = appDisplaymetrics.WidthPixels / 360;
int targetDensityDpi = (int)(160 * targetDensity);

appDisplaymetrics.Density = appDisplaymetrics.ScaledDensity = targetDensity;
appDisplaymetrics.DensityDpi = (Android.Util.DisplayMetricsDensity)targetDensityDpi;

DisplayMetrics activityDisplayMetrics = activity.Resources.DisplayMetrics;
activityDisplayMetrics.Density = activityDisplayMetrics.ScaledDensity = targetDensity;
activityDisplayMetrics.DensityDpi = (Android.Util.DisplayMetricsDensity)targetDensityDpi;
}

也在Activity#onCreate方法中调用。代码比较简单,并且不涉及系统非公开api的调用,所以理论上不会影响app的稳定性。

注意:如果您在系统设置中切换字体然后返回应用程序,字体不会发生变化。所以你必须监听字体切换,调用Application#registerComponentCallbacks来注册onConfigurationChanged监听器。

关于android - 设备显示设置(Android 屏幕缩放和字体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com