以编程方式添加 TextView 时,ScrollView 不起作用

ScrollView does not work when adding TextViews programmatically

提问人:Peter Horvath 提问时间:1/5/2023 更新时间:1/5/2023 访问量:37

问:

我在xml文件中定义了一个ScrollView和一个LinearLayout。

    <ScrollView
        android:id="@+id/planList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="8dp"
        android:paddingTop="8dp"
        android:paddingRight="8dp"
        android:paddingBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button"
        app:layout_constraintVertical_bias="0.0">

        <LinearLayout
            android:id="@+id/planListView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
    </ScrollView>

我以编程方式从 Activity 添加 TextViews。

    val textView = TextView(this)
    textView.text = text
    textView.setPadding(0, 8, 0, 8)
    textView.breakStrategy = LineBreaker.BREAK_STRATEGY_BALANCED
    binding.planListView.addView(textView)

它填满了 linearLayout。当列表超过可用大小时,滚动条不会显示,并且根本没有可用的滚动。

怎么了?我怎样才能让它工作?

先谢谢你。

Android Kotlin 滚动视图

评论


答:

1赞 Oleg 1/5/2023 #1

要使其正常工作,您需要正确设置布局属性。

texView.setLayoutParams(new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,
        LayoutParams.WRAP_CONTENT));

binding.planListView.addView(textView)

评论

0赞 Peter Horvath 1/5/2023
谢谢。我在 ScrollView 上面还有其他元素。因此,我希望 ScrollView 使用可用空间。我应该用什么来代替FILL_PARENT?
0赞 cactustictacs 1/5/2023 #2

ScrollView当内容大于其本身时滚动 - 它充当窗口,允许您来回移动内容,以便您可以看到不同的部分。如果将高度设置为 ,则确保始终与其内容的高度相同 - 因此它不会滚动,并且可能会部分离开屏幕(这就是这里发生的情况 - 您可以使用布局检查器进行检查,您将看到视图延伸到屏幕区域下方)。ScrollViewwrap_contentScrollView

您需要为它提供固定的高度,或者以其他方式限制它,以便当其内容变得太大时,它不会延伸到屏幕之外。通常,UI 中会有一个区域,您希望显示可滚动内容窗口 - 该区域是您的 .如果它的内容太大而无法容纳在该区域内,它将允许滚动。就是这样!ScrollViewScrollView

评论

0赞 Peter Horvath 1/5/2023
我会选择“否则限制它,这样当它的内容变得太大时,它就不会延伸到屏幕之外”。我应该使用什么约束?
0赞 cactustictacs 1/6/2023
@PeterHorvath使用 并将 的底部约束设置为 的底部或下面另一个视图的顶部。并设置顶部约束,以便将顶部和底部固定到您希望它占据的区域。然后创建 0dp,以便它可以调整大小以匹配您的约束。(developer.android.com/develop/ui/views/layout/constraint-layoutConstraintLayoutScrollViewparentScrollViewlayout_height)