¿Cómo detectar el final de ScrollView en Android?

En Android, ScrollView es una vista que permite al usuario desplazarse hacia arriba y hacia abajo para visitar los elementos declarados en su interior. ScrollView se usa más comúnmente para mostrar TextView que contiene una gran cantidad de texto que no cabe en una sola instancia de una pantalla. Los usuarios pueden desplazarse hacia abajo y hacia arriba para leer el texto completo de TextView. ScrollViews también se utilizan en formularios en los que la aplicación requiere que los usuarios lean todos y cada uno de los términos y condiciones antes de aceptarlos. A menos que se alcance el fondo, el usuario no puede continuar ya que los botones están deshabilitados. A continuación se muestra un ejemplo.

ScrollView in Android

Entonces, en este artículo, le mostraremos cómo puede crear una función para detectar si el usuario ha llegado al final de ScrollView en Android. Siga los pasos a continuación una vez que el IDE esté listo.

Implementación paso a paso

Paso 1: crea un nuevo proyecto en Android Studio

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Demostramos la aplicación en Kotlin, así que asegúrese de seleccionar Kotlin como idioma principal al crear un nuevo proyecto.

Paso 2: Agregar una string

Vaya a aplicación > res > valores > strings.xml y agregue una string de muestra como se muestra a continuación.

XML

<resources>
    <string name="app_name">GFG | ScrollViewEnd</string>
    <string name="my_data">"Text Goes Here"</string>
</resources>

Paso 3: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml . Agregue un TextView dentro de un ScrollView como se muestra a continuación. Establezca el texto de TextView en la string que creamos en el código anterior.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    tools:context=".MainActivity">
  
    <ScrollView
        android:id="@+id/scroll_view_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="UselessParent">
  
        <TextView
            android:id="@+id/text_view_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30sp"
            android:text="@string/my_data"/>
  
    </ScrollView>
  
</RelativeLayout>

Paso 4: trabajar con el archivo MainActivity.kt

Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

package org.geeksforgeeks.scrollviewend
  
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.ViewTreeObserver
import android.widget.ScrollView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
// Extend Touch Listener and Scroll Listener
class MainActivity : AppCompatActivity(), View.OnTouchListener, ViewTreeObserver.OnScrollChangedListener {
  
    // Declaring ScrollView from the layout file
    private lateinit var mScrollView: ScrollView
  
    @SuppressLint("ClickableViewAccessibility")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Initializing the ScrollView
        mScrollView = findViewById(R.id.scroll_view_1)
  
        // Invoking touch listener to detect movement of ScrollView
        mScrollView.setOnTouchListener(this)
        mScrollView.viewTreeObserver.addOnScrollChangedListener(this)
    }
  
    // We want to detect scroll and not touch, 
    // so returning false in this member function
    @SuppressLint("ClickableViewAccessibility")
    override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
        return false
    }
  
    // Member function to detect Scroll, 
    // when detected 0, it means bottom is reached
    override fun onScrollChanged() {
        val view = mScrollView.getChildAt(mScrollView.childCount - 1)
        val topDetector = mScrollView.scrollY
        val bottomDetector: Int = view.bottom - (mScrollView.height + mScrollView.scrollY)
        if (bottomDetector == 0) {
            Toast.makeText(baseContext, "Scroll View bottom reached", Toast.LENGTH_SHORT).show()
        }
        if (topDetector <= 0) {
            Toast.makeText(baseContext, "Scroll View top reached", Toast.LENGTH_SHORT).show()
        }
    }
}

Producción:

Puede ver que cuando nos desplazamos hacia abajo para llegar al final, aparece un mensaje Toast que indica que se llegó al final. Lo mismo se sigue cuando se llega a la cima.

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *