我的列表大小是整个屏幕,看不到下面的按钮或滚动

Posted

技术标签:

【中文标题】我的列表大小是整个屏幕,看不到下面的按钮或滚动【英文标题】:My list size is all the screen and can't see buttons below or scroll 【发布时间】:2021-03-29 23:03:06 【问题描述】:

我已经尝试了所有方法,从嵌套滚动视图到仅使用滚动视图来包裹我的整个视图。

问题是我的列表太大,我看不到它下面的按钮,所以我希望能够滚动我的列表直到最后,然后在底部显示我的按钮

如果列表很小,所有按钮都会显示,但是当它太大时我不能

我不知道我是否实现了嵌套滚动,但这是我目前没有在大列表滚动时显示我的按钮的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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_
    android:layout_
    android:orientation="vertical"
    tools:context=".ui.attendance.RecordAttendanceFragment">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:gravity="center"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/Toolbar"
        app:contentInsetStart="0sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/toolbar_back"
            android:layout_
            android:layout_
            android:layout_gravity="start"
            android:layout_marginStart="8dp"
            android:src="@drawable/ic_baseline_arrow_back_24" />

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_marginEnd="35dp"
            android:gravity="center"
            android:orientation="horizontal">

            <LinearLayout
                android:layout_
                android:layout_
                android:layout_marginStart="43dp"
                android:layout_marginTop="2dp"
                android:layout_weight="1"
                android:gravity="start"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/toolbar_logo"
                    android:layout_
                    android:layout_
                    android:layout_marginStart="10dp"
                    android:src="@drawable/logo"
                    tools:text="My idea pool" />

            </LinearLayout>

        </LinearLayout>


    </androidx.appcompat.widget.Toolbar>

    <LinearLayout
        android:id="@+id/progress_bar"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:gravity="center"
        android:visibility="gone">

        <ProgressBar
            android:layout_
            android:layout_ />

    </LinearLayout>


    <LinearLayout
        android:id="@+id/empty_container"
        android:layout_
        android:layout_
        android:layout_gravity="center"
        android:gravity="center"
        android:visibility="gone">

        <TextView
            android:id="@+id/txt_empty_container"
            android:layout_
            android:layout_
            android:gravity="center"
            android:textSize="20sp"
            tools:text="test" />


    </LinearLayout>

    <LinearLayout
        android:id="@+id/meeting"
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:padding="16dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/attendence_groups_selected_view">

        <TextView
            android:id="@+id/textView"
            android:layout_
            android:layout_
            android:text="Meeting title"
            android:textSize="20sp"
            android:textStyle="bold" />

        <androidx.cardview.widget.CardView
            android:id="@+id/cardMeetingtitle"
            android:layout_
            android:layout_
            android:layout_marginTop="8dp"
            app:cardCornerRadius="8dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="horizontal"
                android:padding="16dp">

                <EditText
                    android:id="@+id/ext_group_meeting_title"
                    android:layout_
                    android:layout_
                    android:background="@null"
                    android:hint="Group meeting"
                    android:imeOptions="actionDone"
                    android:lines="1"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:textSize="20sp" />

            </LinearLayout>

        </androidx.cardview.widget.CardView>

    </LinearLayout>

    <TextView
        android:id="@+id/attendance"
        android:layout_
        android:layout_
        android:padding="16dp"
        android:text="Attendees"
        android:textSize="20sp"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/attendance_list"
        android:layout_
        android:layout_ />

    <Button
        android:id="@+id/btn_save_attendance"
        android:layout_
        android:layout_
        android:layout_marginStart="16dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="8dp"
        android:background="@drawable/button_round_blue"
        android:text="Record attendance"
        android:textColor="#FFFFFF" />

    <Button
        android:id="@+id/btn_select_all"
        android:layout_
        android:layout_
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/button_round_white"
        android:text="Select all"
        android:textColor="@color/blueButtons" />

</LinearLayout>

如果列表太大,最后两个按钮不会显示,它们位于我的屏幕下方,当我滚动到列表底部时,我看不到它们

【问题讨论】:

【参考方案1】:

由于列表视图可以无限大,当您设置它们的高度以包裹内容时,它们的表现并不好。相反,您应该将其修复它的高度 设置为具体值或使用重力或类似的值,然后按钮应位于屏幕底部。当然,这意味着按钮将始终在ListView 下可见,这可能不是您想要实现的。我假设您希望在滚动到列表视图底部时显示按钮。

对于后者有一些可能的解决方案:

Set the height of your list view base on the child count,然后您就可以将它放在滚动视图中,它会按预期工作。 将按钮用作适配器内的视图类型,并将它们直接放入列表视图中。 不要使用列表视图,而是将列表项插入垂直线性布局中,并让父布局为 ScrollView。

【讨论】:

【参考方案2】:

在另一个视图中添加按钮和列表,例如在RelativeLayout中添加这样的

-------->

<RelativeLayout
android:layout_
android:layout_
android:orientation="vertical">

<ListView
    android:id="@+id/attendance_list"
    android:layout_above="@id/btn_save_attendance"
    android:layout_
    android:layout_ />

<Button
    android:background="@drawable/button_round_blue"
    android:id="@+id/btn_save_attendance"
    android:layout_above="@id/btn_select_all"
    android:layout_
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="16dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="32dp"
    android:layout_
    android:text="Record attendance"
    android:textColor="#000000" />

<Button
    android:background="@drawable/button_round_white"
    android:id="@+id/btn_select_all"
    android:layout_alignParentBottom="true"
    android:layout_
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="8dp"
    android:layout_
    android:text="Select all"
    android:textColor="@color/black" />

在RelativeLayout中使用,无论列表是否更大,按钮都将始终位于顶部

【讨论】:

【参考方案3】:

将您的布局转换为如下文件

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_>
        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_
            android:fitsSystemWindows="false"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_
                android:layout_
                app:contentInsetEnd="0dp"
                app:contentInsetStart="0dp"
                app:layout_collapseMode="pin">
                ......
            </androidx.appcompat.widget.Toolbar>

        </com.google.android.material.appbar.AppBarLayout>


        <androidx.recyclerview.widget.RecyclerView     
            android:layout_
            android:layout_
            android:clipToPadding="false"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/appBarLayout" />
    </androidx.constraintlayout.widget.ConstraintLayout>

创建一个带有页脚和列表项的适配器文件:

class Adaptor(var list: ArrayList<String>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() 

companion object 
    const val FooterType = 1
    const val ListType = 0


private var layoutInflater: LayoutInflater? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder 
    if (layoutInflater == null) 
        layoutInflater = LayoutInflater.from(parent.context)
    
    return if (viewType == FormAdapter.FooterType) 
        val binding: FooterBinding = DataBindingUtil.inflate(layoutInflater!!, R.layout.footer, parent, false)//footer view = 2 buttons
        ViewHolderFooter(binding)

     else 
        val binding: ListItemsBinding = DataBindingUtil.inflate(layoutInflater!!, R.layout.list_items, parent, false)//cardView for your list items(in XML file)
        ListViewHolder(binding)
    



override fun getItemViewType(position: Int): Int  
    return if (position == list.size()-1)
        FooterType
    else
        ListType



override fun getItemCount(): Int 
    return list.size + 1


override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) 


class ViewHolderFooter(var binding: FooterBinding) : RecyclerView.ViewHolder(binding.root) 



....

因此您可以在布局的末尾有两个按钮,而无需滚动到末尾,即使您的列表变得太大,您也可以看到这些按钮。

【讨论】:

以上是关于我的列表大小是整个屏幕,看不到下面的按钮或滚动的主要内容,如果未能解决你的问题,请参考以下文章

按下按钮时更改列表视图背景颜色

列表视图滚动后 RadioGroup 按钮失去状态

调整帧大小后的 UITableView 滚动速度

嵌套滚动区域

为啥chrome浏览器最大化后占出屏幕,右侧的设置和滚动条只能看到一半,网页下面的文字有时候也看不到,

Android:回收站视图没有滚动到最后一个位置