如何在 Android Studio 中滚动时始终显示线性布局的第一行?

How to always display first row of a linear layout while scrolling through it in Android Studio?

我在 scrollView (垂直) 中使用 linearLayout (垂直)。 linearLayout 的所有子项都是 TextView 类型 (我正在该线性布局中动态添加 textViews)

我想让 linearLayout 的第一行始终对用户可见,但我不知道如何实现...

TextView textView;
textView.setText("First row");
        linearLayout2.addView(estimation);

在添加更多行并滚动时,我希望 "First row" 始终向用户显示。

我正在以需要 linearLayout 同时水平和垂直滚动的方式设计 UI。
我不能把第一行放在 scrollView 外面,因为 scrollView 放在水平 scrollView 里面,所以如果我把第一行放在 scrollView 外面,第一行将不会水平滚动。

请帮帮我...

这是 xml 文件

    <HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/addbtn_phase2"
    android:layout_margin="10dp">


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

        </LinearLayout>

    </ScrollView>

</HorizontalScrollView>

在 linearLayout 内部,我像之前所说的那样动态添加 textView,但 **第一行不是动态添加的。**

你要求用离散 views/widgets 来实现相当复杂的东西。

了解您无法阻止该视图滚动,因为该视图对此没有(直接)了解,它正在被滚动视图移动。

您可以编写一个自定义 ScrollView 来检测某个视图(您的 TextView)何时到达屏幕中的特定位置(顶部),然后继续将视图“提升”到 ScrollView 之外,适当地将其放置在完全相同的位置坐标在屏幕上,然后协调器必须与水平 ScrollView 同步移动它,因此当该视图移动时,您将其转换为顶视图的移动。

如您所见,事情已经变得复杂了。

您可以通过将 Top TextView 保留在其 OWN Horizo​​ntal ScrollView 中(在“主”ScrollView 之外)来进行水平同步,当视图水平滚动时,您“翻译”它并以编程方式将其复制到“顶部水平”滚动视图。

[Top Horizontal Scroll View]
   [Top TextView]

[Main ScrollView]
   [Scrollable Content minus the Top TextView]

因此,当您滚动 MainScrollView 时...您还“手动移动”了顶部水平视图,使其并排移动。

只是一个想法,但可能还有其他问题。

重新排列 XML 代码如下:

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/addbtn_phase2"
    android:layout_margin="10dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/relative_layout">


        <ScrollView
            android:layout_marginTop="23dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

            </LinearLayout>

        </ScrollView>

    </RelativeLayout>

</HorizontalScrollView>

现在在相对布局中添加第一行。

重要的是,设置inner scrollView的marginTop属性,使其不会与相对布局的内容重叠