如何根据屏幕的物理尺寸按比例缩放布局?

Posted

技术标签:

【中文标题】如何根据屏幕的物理尺寸按比例缩放布局?【英文标题】:How to scale layout proportionally to screen's physical size? 【发布时间】:2022-01-15 23:24:19 【问题描述】:

需要整个布局宽度与任何设备的屏幕的纵向物理宽度完全一致,这样 DPI、屏幕尺寸、像素纵向宽度或宽高关系都无关紧要.

我现在要做的就是通过将下一个代码添加到 MainActivity.cs 来覆盖用户 android 配置中的字体大小:

public override Resources Resources

    get
    
        Configuration config = base.Resources.Configuration;
        if (config == null)
        
            config = new Configuration();
        
        config.FontScale = 1f;
        return CreateConfigurationContext(config).Resources;
    

这取得了很大的进步,但仍然可以看到不同设备之间的大量差异,这些设备可能具有更长或更短的屏幕、更大或更小的 DPI 以及不同的尺寸。例如来自模拟器的设备 Pixel 2,它具有 1080x1920 分辨率和 420 dpi,布局非常适合(我就是这样做的),但是当我在物理设备 Redmi 9 1080x2340 分辨率和 395 dpi 中尝试时(大约 3 毫米更大的纵向宽度) ,布局变大了,元素放不下。

如何使布局宽度与物理尺寸成比例缩放,以便无论设备如何,它都可以始终适合纵向模式的宽度?

【问题讨论】:

docs.microsoft.com/en-us/xamarin/essentials/… 如果您的项目是Xamarin.Android,首先您可以在设计UI之前获取手机的尺寸或为不同尺寸的屏幕创建不同的xml。另外,使用 wrap_content 代替特定的 dp。此外,您还可以使用 ConstraintLayout,它可以使 UI 中的视图根据屏幕宽度的比例显示。如果你的项目是 Xamarin.Forms,你应该先通过 Essential 获取设备的比例,然后设置视图的宽高。 可以尝试使用权重来设置布局的宽高。 【参考方案1】:

您可以尝试使用 ConstraintLayout 的百分比或比率维度属性。

约束布局:ConstraintLayout

【讨论】:

以上是关于如何根据屏幕的物理尺寸按比例缩放布局?的主要内容,如果未能解决你的问题,请参考以下文章

我希望两个按钮具有相同的宽度并使用自动布局从屏幕顶部按比例在所有屏幕尺寸中定位自己?

UICollectionViewCell 和自动布局缩放

Android布局尺寸思考

如何为不同的屏幕尺寸创建具有自动布局的比例视图?

各种屏幕的标准小部件尺寸

如何确保布局和其他地方的android上正确/直接的尺寸缩放?