我的列表大小是整个屏幕,看不到下面的按钮或滚动
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)
....
因此您可以在布局的末尾有两个按钮,而无需滚动到末尾,即使您的列表变得太大,您也可以看到这些按钮。
【讨论】:
以上是关于我的列表大小是整个屏幕,看不到下面的按钮或滚动的主要内容,如果未能解决你的问题,请参考以下文章