在 Scrollview 中交替使用 Textview 和 Imageview

Alternating Textview and Imageview inside a Scrollview

我正在尝试在我的滚动视图中交替显示文本和图像。代码没有错误,但是当我尝试 运行 应用程序时。它的力量关闭。我是 android 工作室的新手。我怎样才能解决这个问题?我试图在这里搜索答案,但我似乎无法找到我正在寻找的解决方案。

这是我的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical">

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity ="center"
                android:fillViewport="true"
                android:layout_alignParentStart="true"
                android:layout_marginTop="0dp"
                android:id="@+id/scrollView">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textColor="#000"
            android:textColorLink="@android:color/black"
            android:textSize="18sp"

            android:text="hello"/>

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:src="@drawable/cheese_1"/>


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textColor="#000"
            android:textColorLink="@android:color/black"
            android:textSize="18sp"
            android:text="hi" />

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:src="@drawable/cheese_2"/>

    </ScrollView>

</LinearLayout>

Scrollview 只能包含一个child。所以将 imageViews 和 TextViews 放在 LinearLayout 中,然后将 LinearLayout 放在 ScrollView 中。

现在可以了

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:gravity="center"
                  android:orientation="vertical">

        <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:gravity ="center"
                    android:fillViewport="true"
                    android:layout_alignParentStart="true"
                    android:layout_marginTop="0dp"
                    android:id="@+id/scrollView">

            <LinearLayout
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
             <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:textColor="#000"
                android:textColorLink="@android:color/black"
                android:textSize="18sp"
                android:text="hello"/>

            <ImageView
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:src="@drawable/cheese_1"/>


            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:textColor="#000"
                android:textColorLink="@android:color/black"
                android:textSize="18sp"
                android:text="hi"/>

            <ImageView
                android:layout_width="15dp"
                android:layout_height="15dp"
                android:src="@drawable/cheese_2"/>
    </LinearLayout>
        </ScrollView>

    </LinearLayout>

您在滚动视图中包含了过多的直接子项。滚动视图一次只能处理一个子视图,因此您必须将所有其他视图包装在一个视图下。

所以你的xml现在看起来像这样

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical">

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity ="center"
                android:fillViewport="true"
                android:layout_alignParentStart="true"
                android:layout_marginTop="0dp"
                android:id="@+id/scrollView">
    <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textColor="#000"
            android:textColorLink="@android:color/black"
            android:textSize="18sp"

            android:text="hello"/>

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:src="@drawable/cheese_1"/>


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textColor="#000"
            android:textColorLink="@android:color/black"
            android:textSize="18sp"
            android:text="hi" />

        <ImageView
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:src="@drawable/cheese_2"/>
    </LinearLayout>
    </ScrollView>

</LinearLayout>

现在应该可以了。

改为使用 ListviewRecyclerview 并使用自定义 Adapter 来交替显示图像和文本。那会好很多并且可控。

如果你仍然想只使用 scrollview,你可以只使用一个直接子节点到 scrollview.Add 一个线性布局作为 scrollview 的子节点,所有图像和文本视图作为该线性布局的子节点,如下所示

<ScrollView ..>
  <LinearLayout ..>
    <TextView ../>
    <ImageView ../>
    <TextView ../>
 </LinearLayout>
</ScrollView>