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

Posted

技术标签:

【中文标题】如何确保布局和其他地方的android上正确/直接的尺寸缩放?【英文标题】:How to ensure correct/direct dimension scaling on android in layouts and elsewhere? 【发布时间】:2019-11-28 11:27:23 【问题描述】:

我可以使用任何可以直接缩放的单位吗?真的是用 px 编写所有内容并乘以正确比例的唯一方法吗?

(scale = <real screen height>/<template base height> . and every dimension is <dimen in px> * scale)

桶方法的“dp”不适用于我 - 我正在为小屏幕编写,其中元素在触发下一个 dp 缩放阈值之前远离屏幕。

目前我在画布上绘图的解决方法是(如下),但我不知道如何使用 xml 布局来协调它

@Override
    public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) 
        super.onSurfaceChanged(holder, format, width, height);
        screenScale = ((float) width) / (float) mBackgroundBitmap.getWidth();
        mTopBarYOffset = mTopBarYOffset * screenScale;
        mTopBarXOffset = mTopBarXOffset * screenScale;
//and so on for every dimension

【问题讨论】:

我正在尝试将布局元素与预先绘制在背景上的边框对齐,因此我需要它在每个屏幕上看起来完全相同,但大致相同 - 3px 的差异会使整个布局关闭。像 %(of screen) 这样的单位是理想的,但它不存在。 【参考方案1】:

您可以使用ConstraintLayout。

ConstraintLayout 中,您可以像这样使用百分比:

 <Button
    android:layout_
    android:layout_
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_percent="0.6" //line 1
    app:layout_constraintWidth_percent="0.5"  //line 2 
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />

所以我做了什么 - 我告诉我的按钮等于其父级的 60% 的高度(见第 1 行) 我还告诉我的按钮等于其父宽度的 50%(见第 2 行)。

对于更复杂的布局,我还会使用 guidelines 和 Chains 来简化响应式布局。

【讨论】:

谢谢你工作得很好!有点离题......当我移动/调整元素大小时,有没有办法让编辑器使用/计算_percent 而不是layout_width/height?最好拖放而不是不时输入。 我不这么认为,我认为当您从编辑器中拉伸视图时,您会在 dp 中调整视图的大小。如果这有帮助,请接受答案,以便帮助其他有相同问题的开发人员。 我开枪说“它有效”。它适用于元素的宽度和高度,但边距呢?经过一番摆弄后,我看不到任何方法可以为前任留出余地。 = 父母的 0.132。所以解决方案的一半 - 我可以创建元素,但我没有办法将它们定位在屏幕上 8dp16dp 这样的小边距尺寸很好,我在google play store 中有一个应用程序具有固定尺寸的边距,因为它们很小,在所有设备上看起来都不错。 我知道可穿戴布局,但它们都有相同的问题 - dp 缩放之间的跳跃太大。它们的工作方式仍然相同,如果我在一个屏幕上声明 16dp 的边距,它将与具有 5x5 网格的背景很好地对齐,但在另一个屏幕上,最后一行中的文本将从网格的中间开始。如果我将元素与屏幕对齐,我需要使用较大的值,如果我与以前的元素对齐,“舍入误差”累积最终效果是相同的所以只要谷歌没有为磨损操作系统更改此内容,Containt 布局是唯一的方法去吧。

以上是关于如何确保布局和其他地方的android上正确/直接的尺寸缩放?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 HTTP_REQUEST 来自正确的地方?

网站背景在 Android 上显示不正确。 Chrome DevTools 没有反映这一点

当softKeyBoard隐藏按钮和其他元素时如何使布局可滚动[ANDROID]

在android中点击EditText的时候会弹出软键盘,这时候如果想隐藏软键盘或者填完内容后点其他的地方直接隐藏

Android日志:Jetpack Compose中的布局

如何通过正确的视图 z 顺序在 android 中实现这个基本布局