【问题标题】:How to mantain aspect ratio of elements while rotating a ScrollView?如何在旋转 ScrollView 时保持元素的纵横比?
【发布时间】:2012-06-07 00:16:13
【问题描述】:

让我们假设一个 800x1280 像素的设备在纵向模式下具有以下布局:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none"
    android:fadingEdgeLength="0dip" >
    <LinearLayout
        android:id="@+id/MyLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>
</ScrollView>

并在 Activity 清单中使用 android:configChanges="orientation"

我动态地将两个子视图添加到 MyLinearLayout,其布局为 width = MATCH_PARENTheight = getWindowManager().getDefaultDisplay().getHeight()。因此,我可以在两个孩子之间垂直滚动,每个孩子都占据整个屏幕。

现在,当设备进入横向时,由于 MATCH_PARENT 属性,孩子的宽度从原来的 800 延伸到 1280。

在垂直方向上,它们没有被拉伸,因为它们最初是用固定的 1280 高度创建的,所以它们保持 1280 的高度。

垂直拉伸视图的正确方法是什么?

如果我尝试将 onConfigurationChanged 中的 child.setLayoutParams 设置为 width = MATCH_PARENT 和 height = 2048(即 1280 * 1280/800),则会出现异常。

【问题讨论】:

    标签: android orientation scrollview aspect-ratio


    【解决方案1】:

    我正在使用动态实例化的 CanvasView(来自 S-Pen SDK)子级。在this answer 的帮助下,我能够做我想做的事。

    我已经固有 com.samsung.sdraw.CanvasView 并覆盖 onMeasure 以保持我想要的纵横比,我需要调用 setEnableZoom(false ) 为每个孩子纠正内容拉伸,它在横向模式下以双倍拉伸内容,超出屏幕边界。

    【讨论】:

      最近更新 更多