ScrollView 及其内容使用“wrap_content”。如何分配约束优先级?

Posted

技术标签:

【中文标题】ScrollView 及其内容使用“wrap_content”。如何分配约束优先级?【英文标题】:ScrollView and its content use 'wrap_content'. How to assign constraint priority? 【发布时间】:2020-11-07 13:50:37 【问题描述】:

我需要一个水平的ScrollView,固定高度为100dp,动态内容为ImageViews。

目前我的 ScrollView 有一个水平的LinearLayoutImageViews。 ImageViews 的宽度启用了wrap_content,而所有它们的高度都在固定高度上。 ScrollView 本身的高度为wrap_content

如果 ScrollViews 的内容大于视图可以在不滚动的情况下显示的内容,则 ImageViews 图像将按比例缩小。 ImageViews layout_hight 根据其边界工作,但图像本身不是。

scaleType 更改为其他内容无济于事。为 LinearLayout 设置固定宽度是可行的,但由于内容应该是动态的,所以这不是一个选项。这似乎是一个默认用例。这在xml 中不可能吗?

手动给定精确 ScrollView 宽度的示例

视图看起来符合我的需要,但不允许动态内容。

wrap_content上的宽度示例

图像视图

ScrollView 代码如下:

<ScrollView
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:background="#CCCCFF">

    <LinearLayout
        android:layout_
        android:layout_
        android:background="#AAAAFF"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/so1"
            android:layout_
            android:layout_
            android:adjustViewBounds="true"
            android:background="#FF0000"
            android:scaleType="fitCenter"
            android:src="@drawable/so" />

        <Space
            android:layout_
            android:layout_ />

        <ImageView
            android:id="@+id/so2"
            android:layout_
            android:layout_
            android:adjustViewBounds="true"
            android:background="#FF0000"
            android:scaleType="fitCenter"
            android:src="@drawable/so" />

        <Space
            android:layout_
            android:layout_ />

        <ImageView
            android:id="@+id/so3"
            android:layout_
            android:layout_
            android:adjustViewBounds="true"
            android:background="#FF0000"
            android:scaleType="fitCenter"
            android:src="@drawable/so" />

    </LinearLayout>
</ScrollView>

【问题讨论】:

【参考方案1】:

好的,这比我想象的要容易解决:

ScrollViews 总是垂直的。 ScrollView 中没有方向属性。要获得水平 ScrollView,请改用 HorizontalScrollView 并放弃方向。

所以这个

<ScrollView
android:layout_
android:layout_
android:orientation="horizontal">

应该是:

<HorizontalScrollView
android:layout_
android:layout_>

【讨论】:

以上是关于ScrollView 及其内容使用“wrap_content”。如何分配约束优先级?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置scrollView 横向滚动

如何使用AutoLayout(iOS / Xamarin.iOS)使ScrollView适合其内容?

SwiftUI - 如何获取 ScrollView 内容的大小(高度)

ScrollView 不使用包含 Android 中动态内容的 LinearLayout 滚动

在 ScrollView 中选择 TextField(打开键盘)时 - 内容使用键盘上下跳动

与 scrollView 一起使用时,ViewPager 的内部内容不可见 [关闭]