如何在可滚动列表视图中制作可滚动项?

时间:2017-11-22 08:55:25

标签: android listview scrollview

我有一个小型数据库,它将数据填充到列表视图中,该列表视图使用下面提供的其他布局来显示数据 如果第一个字段的文本超过两行,则文本开始隐藏。所以我想我会让listview的每一行都可以滚动。虽然它显示滚动条但没有任何反应
这是listview
使用的布局

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:layout_height="75dp"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="75dp"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <TextView
            android:id="@+id/desc_d"
            android:layout_width="165dp"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:text="Description"
            android:gravity="center"
            android:textAppearance="@android:style/TextAppearance.Large"/>

        <TextView
            android:id="@+id/cate_d"
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:layout_toEndOf="@id/desc_d"
            android:text="others"
            android:textAppearance="@android:style/TextAppearance.Large" />

        <TextView
            android:id="@+id/date_d"
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:layout_toEndOf="@id/cate_d"
            android:text="16/11/2017"
            android:textAppearance="@android:style/TextAppearance.Large" />

        <TextView
            android:id="@+id/amt_d"
            android:layout_width="80dp"
            android:layout_height="match_parent"
            android:gravity="center"
            android:layout_toEndOf="@id/date_d"
            android:text="100000"
            android:textAppearance="@android:style/TextAppearance.Large" />

    </RelativeLayout>
</ScrollView>


我的MainActivity布局有一个listview,它也可以滚动并使用上面的布局。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:descendantFocusability="beforeDescendants"
        android:focusableInTouchMode="true"
        android:keepScreenOn="false"
        android:scrollbarAlwaysDrawHorizontalTrack="false"
        android:scrollbarAlwaysDrawVerticalTrack="false"
        tools:context="apps.harry.expensedata.MainActivity">

        <Button
            android:id="@+id/add_expense_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="24dp"
            android:layout_marginTop="24dp"
            android:onClick="addExpenseClick"
            android:text="@string/button_1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/view_expense_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="24dp"
            android:onClick="viewClick"
            android:text="@string/button_2"
            app:layout_constraintStart_toEndOf="@+id/add_expense_btn"
            app:layout_constraintTop_toTopOf="parent" />


        <RelativeLayout
            android:id="@+id/relativeLayout"
            android:layout_width="match_parent"
            android:layout_height="406dp"
            android:layout_marginTop="84dp"
            app:layout_constraintTop_toTopOf="parent"
            tools:layout_editor_absoluteX="0dp">

            <ListView
                android:id="@+id/list_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                tools:layout_editor_absoluteX="8dp"
                tools:layout_editor_absoluteY="248dp" />
        </RelativeLayout>
    </android.support.constraint.ConstraintLayout>

</ScrollView>


这是APP的屏幕截图 enter image description here


正如您所看到的那样,该布局中的每一行都有一个滚动条,但滚动时没有任何反应。
请告诉我如何实现这一目标。

5 个答案:

答案 0 :(得分:1)

这不是针对您的滚动问题的解决方案建议,但是由于用户体验,您应该考虑在可滚动列表中不能滚动列表项。

请参阅Material Guidelines。这里有一点摘录。

  

列表图块最多可包含三行文本,文本长度可能因同一列表中的图块而异。要显示三行以上的文字,请使用卡片。

     

将最有特色的内容放在图块的左侧,将最不显眼的内容放在右侧。

     

规格:

     

列表磁贴上的大部分空间应专用于主要操作   将最有区别的内容放在图块的左侧   在具有多行内容的切片中,将最有区别的内容放在第一行中   在右侧放置补充措施

答案 1 :(得分:0)

使scrollView Height="wrap_content" 代替固定尺寸​​。也许有用

答案 2 :(得分:0)

尝试使用maxLines和minLines作为TextView的属性来容纳所有数据。

答案 3 :(得分:0)

在他们的指南中定义的Google不会在scrollview中使用scrollview,它更像是指导它无法正常工作。你看到了那种情况。 Tbe解决方案设置为您的listitem高度为wrap_content,最佳实践如上所述,不使用超过2-3行文本的listitems。查看materisl设计指南以查看列表项的维度

答案 4 :(得分:0)

我建议您将自定义列表项高度更改为wrap_content,然后您不需要滚动。

<?xml version="1.0" encoding="utf-8"?>
<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="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/decription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:hint="decription" />

    <TextView
        android:id="@+id/whatFor"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:hint="whatFor" />

    <TextView
        android:id="@+id/date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:hint="date" />

    <TextView
        android:id="@+id/amount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:hint="amount" />

</LinearLayout>

您的输出将如下图所示。

enter image description here

我希望您的问题能够得到解决,如果您还有任何疑问,请询问。