如何确保布局和其他地方 android 上的 correct/direct 维度缩放?

How to ensure correct/direct dimension scaling on android in layouts and elsewhere?

有没有我可以使用的可以直接缩放的单位?真正以像素为单位编写所有内容并将其乘以正确比例的唯一方法吗?

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

"dp" 桶方法对我不起作用 - 我正在为小屏幕编写,在触发下一个 dp 缩放阈值之前,元素在屏幕外很长。

目前我在 canvas 上绘图的解决方法是(如下),但我不知道如何将其与使用 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

您可以使用 ConstraintLayout.

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

 <Button
    android:layout_width="0dp"
    android:layout_height="0dp"
    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 and Chains 来更轻松地制作响应式布局。